【发布时间】:2016-01-14 01:59:12
【问题描述】:
这个问题在 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
如果我尝试返回该值,只会得到“未定义”。我遵循了 SO 的一些想法,但是 仍然失败。
这些是:
function foo(address){
var returnvalue;
geocoder.geocode( { 'address': address}, function(results, status) {
returnvalue = results[0].geometry.location;
})
return returnvalue;
}
foo(); //still undefined
【问题讨论】:
-
任何来到这里的人please read this question first。它解释了如何有效地解决这个问题。
-
使用 Q,或者它的任何变体,比如 angularJs 附带的 $q 库。永不回头。异步函数立即返回 undefined。所以永远不要浪费时间尝试在未定义的情况下做事。也不要像往常一样在异步函数中使用 'return' 关键字。改用延迟承诺。 deferred.resolve(STUFF you want to do) ,然后你可以简单地返回那个,'return deferred.promise; '。 :)
-
像这样使用 deasync stackoverflow.com/a/47051880/2083877
标签: javascript asynchronous callback javascript-objects