【问题标题】:Perform operation after all the call back functions got executed执行完所有回调函数后执行操作
【发布时间】:2015-03-14 15:02:47
【问题描述】:

我有以下场景

asyncFunction(x1)
异步函数(x2)
asyncFunction(x3)
...
...
异步函数(xn)

asyncFunction 的作用是从服务器获取数据和图像并附加到 html 的正文中。问题是数据大小每次都不同,因此每个函数可能在不同的时间完成。这使得它毫无用处,因为即使在加载了底部元素之后,一些顶部元素仍会加载。

如何编写 Javascript 代码,以便在所有回调完成后附加函数数据,或者仅在函数 j 执行后才执行函数 i,其中 j

我正在使用 Javascript 和 Ajax 来获取数据。 PS:这几乎类似于新闻提要。

【问题讨论】:

  • 由于asyncFunction是异步的,所以没有办法知道它什么时候结束,除非asyncFunction本身提供了一种机制,比如回调,你可以在其中指定要调用的方法,或者完成后要执行的一些代码。

标签: javascript jquery ajax asynchronous callback


【解决方案1】:

您可以使用jquery deffered objects

在每个函数中定义deffered对象,例如:

var asyncFunction1 = function(x1) {
   var d = new $.Deferred();
   ...
   //when it will be ready
   d.resolve();
   ...
   return d.promise();
}

然后

$.when(asyncFunction1(), asyncFunction2(), ...).done(function() {
    // here all functions will be finished
 });

【讨论】:

    【解决方案2】:

    使用 Promise 可以轻松做到这一点。通过this 之类的文章了解该主题。那我建议你看看Q framework

    然后,您要寻找的是,只有在所有承诺都已解决后,您才想执行代码。如果你使用 Q,它看起来像这样:

    Q.all([a,b,c,d]).then(function(){
         //runs after all of the promises fulfilled
    });
    

    【讨论】:

      猜你喜欢
      • 2018-10-30
      • 1970-01-01
      • 2021-08-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-14
      • 1970-01-01
      • 2013-12-23
      相关资源
      最近更新 更多