如果至少有一个Deferreds被解析,jquery中是否有一个返回promise的函数?

时间:2015-06-04 07:56:04

标签: jquery

我搜索了jquery文档,但我找不到一个与jquery.when()具有相同目标的函数但需要至少一个延迟解析(并不是所有像jquery.when())才能解决?

1 个答案:

答案 0 :(得分:2)

我不认为jQuery的承诺实现中存在.race,但您可以使用另一个轻量级承诺实现(即promise.js)来执行此操作:< / p>

var one = Promise.resolve($.ajax(/*whatevs*/));
var two = Promise.resolve($.ajax(/*sth else*/));
Promise.race([one,two]).then(function(winner){
// do whatever
});

请参阅MDN docspromise.js

或者你也可以在jQuery中使用Deferred.progress.notfiy(虽然这感觉非常尴尬):

var one = $.Deferred(function(dfd){
    setTimeout(function(){
        dfd.notify('foo');
        dfd.resolve('foo');
    }, 200);
});

var two = $.Deferred(function(dfd){
    setTimeout(function(){
        dfd.notify('bar');
        dfd.resolve('bar');
    }, 100);
});


$.when(one, two).progress(function(oneNotification, twoNotification){
    console.log(oneNotification, twoNotification);
}).then(function(oneResult, twoResult){
    console.log(oneResult, twoResult);
});