我在寫幾個函數,這些函數是依賴於其他延遲對象的不同組合的有效延遲對象。如何使一個jQuery延期對象解決/拒絕與另一個延期相同的「已解決/被拒絕」狀態?
function takesOneSecond() {
return $.Deferred(function(deferred) {
// Does something...
}).promise();
}
function takesOneMinute() {
return $.Deferred(function(deferred) {
// Does something...
}).promise();
}
function takesThreeMinutes() {
return $.Deferred(function(deferred) {
// Does something...
}).promise();
}
function mySwitchingFunction() {
return $.Deferred(function(deferred) {
// Does something here..
// Effectively chooses one of several other functions to call.
if(/* choose 1 second */) {
// We tie ourselves to the '1 second' function.
// Call that function.
takesOneSecond().done(function() {
deferred.resolve(); // If that's done, I'm done too.
}).fail(function() {
deferred.reject(); // If that failed, I've failed too.
});
} else if(/* choose 1 minute */) {
// Etc..
} else if(/* choose 3 minutes */) {
// Etc..
}
}).promise();
}
我寫這個代碼片段很多,有沒有其他辦法可以使延期鏡或級聯推遲的另一個相同的「解決」或「拒絕」狀態?
takesOneSecond().done(function() {
deferred.resolve(); // If that's done, I'm done too.
}).fail(function() {
deferred.reject(); // If that failed, I've failed too.
});
是使用$。何時結合延期對象你在找什麼? – BNL
如果你寫這種模式很多,我會說你在做一些嚴重錯誤的事情,應該重新思考你的邏輯。 – adeneo
@adeneo:你能指出一些具體的東西嗎?這基本上是在一系列健全檢查的最後。在檢查結束時,根據檢查結果調用幾個函數中的一個函數(每個函數都是延遲的)。你有推薦的特定模式嗎? –