如何判断4个并行“需要”回调是否全部完成?

时间:2015-09-02 06:12:44

标签: javascript callback requirejs require

我有一些javascript代码如下:

require([url0],f0);
require([url1],f1);
require([url2],f2);
require([url3],f3);

f0f1f2f3是四个功能。 现在我有另一条指令。我想在所有四个函数完成执行后执行它。我应该在哪里放置指令,还是应该更改现有代码的结构?

2 个答案:

答案 0 :(得分:2)

您可以创建自己的函数,该函数接受多个参数,并在全部加载时调用回调:

function requireMulti(data, doneFn) {
    var numRemaining = data.length;
    data.forEach(function(val, index) {        
        require([val.url], function() {
            --numRemaining;
            val.fn.apply(this, arguments);
            if (numRemaining === 0) {
                doneFn();
            }
        });
    });
}

// sample usage
requireMulti([
    {url: url0, fn: f0},
    {url: url1, fn: f1},
    {url: url2, fn: f2},
    {url: url3, fn: f3},
  ], function() {
    // everything is done here
});

答案 1 :(得分:1)

您可以考虑使用一个初始值为4的计数器和一个包含在类中的回调。

function CountDown(c, f) {
    this.counter = c;
    this.func = f;
    this.dec = function () {
        this.counter--;
        if (!this.counter) {
            this.func();
        }
    }
}

var counter = new CountDown(4, function () { alert('got all 4'); });

f0 ... f3的所有功能中,您可以添加一个代码段

function f0() {
    // code
    counter.dec();
}