Esta pregunta se hace muchas veces en SO. Pero aun así no puedo obtener cosas.¿Cómo devolver el valor de una función de devolución de llamada asincrónica?
Quiero obtener algún valor de la devolución de llamada. Mira el guión a continuación para aclararlo.
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 acaba siendo "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
Cualquiera que haya llegado aquí [** lea primero esta pregunta **] (http://stackoverflow.com/questions/14220321/how-to-return-the-response-from-an-ajax-call). Explica cómo abordar este problema de manera efectiva. –
** [¿Por qué mi variable permanece inalterada después de que la modifique dentro de una función? - Referencia de código asíncrono] (http://stackoverflow.com/questions/23667086/why-is-my-variable-unaltered-after-i-modify-it-inside-of-a-function-asynchron) ** también proporciona una explicación más general y detallada del problema en cuestión. –
Usa Q, o cualquiera de sus variantes, como la biblioteca $ q que viene con angularJs. Y nunca mires atrás. Las funciones asíncronas devuelven inmediatamente indefinido. Así que nunca pierdas tu tiempo intentando hacer cosas indefinidas. Además, nunca use la palabra clave 'return' en sus funciones asíncronas, como lo hace normalmente. Use promesas diferidas en su lugar. deferred.resolve (STUFF que desea hacer), luego puede simplemente devolverlo, 'return deferred.promise; '. :) – ISONecroMAn