jQuery promise with dependent promise 和 overall completion

jQuery promise with dependent promise and overall completion

假设我有 2 个 promise promise1, promise2 可以异步执行某些操作。

promise2 取决于 promise1 在 运行 本身之前完成。这很简单。

function runPromises(){
    return promise1().done(function(){
       promise2();
    });
}

问题是我也想知道他们什么时候完成。

runPromises().done(function(){
   alert("promise 1 and 2 done");
});

当前 runPromises 在 promise1 未同时完成时发出警报。

通常,在发布问题之前,我尝试了 30 分钟试图为此找到解决方案,但现在我找到了答案。

我可以通过新建 $.Deferred();

function runPromises(){
    var d1 = new $.Deferred();
    promise1().done(function(){
       promise2().done(function(){
           d1.resolve();
       };
    });

    return d1.promise();
}

runPromises().done(function(){
   alert("promise 1 and 2 done");
});

这里是一个使用两个简单函数的示例,分别称为 process1 和 process2。这些函数关闭并异步执行某些操作(在本例中我只是使用 setTimeout 来模拟)和 return 承诺(为此使用 q 库)。进程 1 运行,然后进程 2 运行,当进程 2 returns 时有空间做某事。希望这会有所帮助:

var process1 = function() {
        var deferred = q.defer();
        setTimeout(function() {
            deferred.resolve();
        }, 10);

        return deferred.promise;
    };

    var process2 = function() {
        var deferred = q.defer();
        setTimeout(function() {
            deferred.resolve();
        }, 10);

        return deferred.promise;
    };

    process1()
        .then(process2)
        .then(function() {
            // Process 1 and 2 have completed
        });

使用 then 链接承诺:

 promise1().then(promise2).then(promise3).done(function(){
        alert("promise 1 and 2 and 3 done");
    });

已编辑:

function runPromises(){ 
   return promise1().then(promise2).then(promise3);
}
runPromises().done(function(){console.log('all done!')});

要链接 promise 操作,并获得对第二个结果的 promise(即当两者都完成时),请使用 then 方法而不是 done:

function runPromises(){
    return promise1().then(function(){
//                    ^^^^
        return promise2();
//      ^^^^^^ always return promise from async functions like this callback
    });
}

如果您不关心参数,您甚至可以将其缩短为 return promise1().then(promise2);