如何从异步回调函数中返回值?

这个问题在这里已经有了答案:

  • 如何返回来自异步调用的响应? 33个答案

  • 这是不可能的,因为您不能从同步方法内的异步调用返回。

    在这种情况下,您需要将回调传递给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?

    下一篇: JavaScript: Passing parameters to a callback function