¿Cómo devolver el valor de una función de devolución de llamada asincrónica? [duplicar

Esta pregunta ya tiene una respuesta aquí:

¿Cómo devuelvo la respuesta de una llamada asincrónica? 33 respuestas

Esta pregunta se hace muchas veces en SO. Pero aún así no puedo conseguir cosas.

Quiero obtener algún valor de la devolución de llamada. Mira la secuencia de comandos a continuación para aclarar.

function foo(address){

      // google map stuff
      geocoder.geocode( { 'address': address}, function(results, status) {
          results[0].geometry.location; // I want to return this value
      })

    }
    foo(); //result should be results[0].geometry.location; value

Si trato de devolver ese valor simplemente "indefinido". Seguí algunas ideas de SO, pero aún falla.

Esos son

function foo(address){
    var returnvalue;    
    geocoder.geocode( { 'address': address}, function(results, status) {
        returnvalue = results[0].geometry.location; 
    })
    return returnvalue; 
}
foo(); //still undefined

Respuestas a la pregunta(3)

Su respuesta a la pregunta