我正在使用when()
來合併promise。我要尋找的是會像done()
上 聯合承諾的方法,這些性狀:jQuery when(...)。done(a,b,c)without unprapping results
- 只調用回調,如果所有承諾的解決(不拒絕/誤碼)
- 送我結果傳遞給
resolveWith
對於組合中的每個承諾,在順序,但解開 - 而不是[result, "success", ...]
陣列每個分辨率
難道這樣的事情存在嗎?
我正在使用when()
來合併promise。我要尋找的是會像done()
上 聯合承諾的方法,這些性狀:jQuery when(...)。done(a,b,c)without unprapping results
resolveWith
對於組合中的每個承諾,在順序,但解開 - 而不是[result, "success", ...]
陣列每個分辨率難道這樣的事情存在嗎?
難道這樣的事情存在嗎?
沒有,但你可以通過使用arguments
object和apply
把它寫自己:
function whenAllThenEach(promises, callback) {
$.when.apply($, promises).then(function() {
return $.map(arguments, function(args) {
return callback.apply(null, args);
});
});
}
我認爲這與我所需要的最接近,謝謝。 – Julik
類似:
$.when(something1, something2).then(thenyoudosomething).done(function(){
// the results from what you use .then
})
是的,它叫。然後。您可以使用.then來處理這些參數並返回一個新的延遲,但是您認爲合適的話可以用參數解析。
function ajax(n) {
return $.Deferred(function(def){
def.resolve(n,"success",{responseText:n});
}).promise();
}
$.when(ajax(1),ajax(2),ajax(3)).then(function(a,b,c){
return $.Deferred().resolve(a[0],b[0],c[0]);
}).done(function(a,b,c){
console.log(a,b,c); // 1 2 3
})
但是,這種做法失敗了,因爲我仍然需要解開'a','b'和'c'的結果...... – Julik
這是正確的。除非,這是隱藏在另一個函數的後面(這是它變得非常有用)。否則,不,這是不可能的。 –
jQuery不會自動執行此操作,因爲它會破壞信息。而不是假設你想要的只是迴應,它會給你迴應,狀態文本和xhr。除了處理參數或擴展jQuery之外,沒有辦法改變它。 –
通過「*送......爲了......每一項決議*」我假定你的意思回調多次調用? – Bergi
是的,這就是我的意思 – Julik