如何和jquery承诺?

How to AND jquery promises?

本问题已经有最佳答案,请猛点这里访问。

我想要一个承诺,当两个承诺promise1和promise2完全解决时,它本身会解决。 我该怎么做呢?

这是我目前可怕的代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
            var c = 0;
            var d = $.Deferred();
            promise1.then(() => {
                c++;
                if (c == 2) {
                    d.resolve();
                }
            });
            promise2.then(() => {
                c++;
                if (c == 2) {
                    d.resolve();
                }
            });
            return d.promise();

我可以调用辅助函数吗?


使用.when

就像是

1
$.when(promise1, promise2).then(function() { /* do something */ });

这将允许您对一个或多个延迟进行分组,并仅在它们全部解决后执行某些操作。 或者如果其中任何一个失败,则调用failCallback

当主延迟解析时,将传递所有组件延迟的已解析值。


1
$.when(promise1, promise2).then(resolution)


你想要jQuery的.when()

查看文档以获取完整示例。 这是要点:

1
2
3
$.when( $.ajax("/myURL/"), someOtherDeferred ).done(function( a1, a2 ) {
   // ... Both deferrals are complete!
});

请注意,$.ajax会创建一个"延迟对象"(如promise),因此这两者是可互换的。

如果您希望即使承诺失败也要执行某些操作,请使用.always()而不是.done()