Этот вопрос задан много раз в SO. Но все равно я не могу получить вещи.Как вернуть значение из асинхронной функции обратного вызова?
Я хочу получить некоторую ценность от обратного вызова. Посмотрите на сценарий ниже для уточнения.
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
Если я попытаюсь вернуть это значение, просто получив «undefined». Я следил за некоторыми идеями из SO, но все еще не работает.
Те:
function foo(address){
var returnvalue;
geocoder.geocode({ 'address': address}, function(results, status) {
returnvalue = results[0].geometry.location;
})
return returnvalue;
}
foo(); //still undefined
Любой, кто получил здесь [**, пожалуйста, сначала прочтите этот вопрос ** **) (http://stackoverflow.com/questions/14220321/how-to-return-the-response-from-an-ajax-call). В нем объясняется, как эффективно решать эту проблему. –
** [Почему моя переменная не изменяется после того, как я изменяю ее внутри функции? - ссылка на асинхронный код] (http://stackoverflow.com/questions/23667086/why-is-my-variable-unaltered-after-i-modify-it-inside-of-a-function-asynchron) ** также обеспечивает более общее, подробное объяснение проблемы. –
Используйте Q или любые его варианты, например, библиотеку $ q, которая поставляется с angularJs. И Никогда не оглядывайся назад. Асинхронные функции немедленно возвращаются не определены. Поэтому никогда не тратьте свое время на то, чтобы делать что-то неопределенное. Также никогда не используйте ключевое слово «return» в своих асинхронных функциях, как обычно. Вместо этого используйте отложенные обещания. отложенным.resolve (STUFF, который вы хотите сделать), а затем вы можете просто вернуть это, «return offfer.promise; ». :) – ISONecroMAn