2015-06-04 17 views
2

我搜索了jquery文檔,但我找不到與jquery.when()具有相同目標的函數,但需要至少一個延遲才能解析(並非全部像jquery.when())才能解決?如果至少有一個Deferreds已解決,jquery中是否有返回promise的函數?

+0

你在尋找函數.then()嗎?請回復https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/然後 – MadOX

+0

你期待[像race()]這樣的方法(https://developer.mozilla。 org/en/docs/Web/JavaScript/Reference/Global_Objects/Promise/race)如m90所述?它應該如何處理拒絕?它是否應該同時處理決定和拒絕「第一場勝利」? ''比賽函數返回一個與第一次通過的承諾一樣解決的承諾,它解決或拒絕,無論哪個先發生。「(來自以上文檔) –

+1

編號jquery.when()具有」AND 「之間的延遲(如果d1 && d2 && d3然後解決)。我需要一個「OR」(如果d1 || d2 || d3則解析)。 –

回答

2

我不認爲有.race在jQuery的承諾實現,但是你可以使用另一種輕量級的承諾實現(即promise.js)這樣做:

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); 
}); 
相關問題