如何从异步回调函数中返回值?
这个问题在这里已经有了答案:
这是不可能的,因为您不能从同步方法内的异步调用返回。
在这种情况下,您需要将回调传递给foo,该回调将接收返回值
function foo(address, fn){
geocoder.geocode( { 'address': address}, function(results, status) {
fn(results[0].geometry.location);
});
}
foo("address", function(location){
alert(location); // this is where you get the return value
});
问题是,如果一个内部函数调用是异步的,那么所有函数'包装'这个调用也必须是异步的,以便'返回'一个响应。
如果你有很多的回调,你可能会考虑冒险并使用类似Q这样的承诺库。
从回调中返回值是没有意义的。 取而代之的是,做“富()”工作,你希望你的回调里面做。
当事件发生时,异步回调会被浏览器或某些框架(如Google地理编码库)调用。 没有地方可以返回值。 换句话说,回调函数可以返回一个值,但调用该函数的代码不会注意返回值。
如果你碰巧使用jQuery,你可能想要这样做:http://api.jquery.com/category/deferred-object/
它允许您推迟回调函数的执行,直到ajax请求(或任何异步操作)完成。 一旦多个Ajax请求全部完成,这也可用于调用回调。
链接地址: http://www.djcxy.com/p/5789.html上一篇: How to return value from an asynchronous callback function?