2014-02-26 74 views
0

我正在使用when()來合併promise。我要尋找的是會像done()上 聯合承諾的方法,這些性狀:jQuery when(...)。done(a,b,c)without unprapping results

  • 只調用回調,如果所有承諾的解決(不拒絕/誤碼)
  • 送我結果傳遞給resolveWith對於組合中的每個承諾,在順序,但解開 - 而不是[result, "success", ...]陣列每個分辨率

難道這樣的事情存在嗎?

+0

通過「*送......爲了......每一項決議*」我假定你的意思回調多次調用? – Bergi

+0

是的,這就是我的意思 – Julik

回答

1

難道這樣的事情存在嗎?

沒有,但你可以通過使用arguments objectapply把它寫自己:

function whenAllThenEach(promises, callback) { 
    $.when.apply($, promises).then(function() { 
     return $.map(arguments, function(args) { 
      return callback.apply(null, args); 
     }); 
    }); 
} 
+0

我認爲這與我所需要的最接近,謝謝。 – Julik

0

類似:

$.when(something1, something2).then(thenyoudosomething).done(function(){ 
     // the results from what you use .then 
}) 
0

是的,它叫。然後。您可以使用.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 
}) 

http://jsfiddle.net/2rn3e/1/

+0

但是,這種做法失敗了,因爲我仍然需要解開'a','b'和'c'的結果...... – Julik

+0

這是正確的。除非,這是隱藏在另一個函數的後面(這是它變得非常有用)。否則,不,這是不可能的。 –

+0

jQuery不會自動執行此操作,因爲它會破壞信息。而不是假設你想要的只是迴應,它會給你迴應,狀態文本和xhr。除了處理參數或擴展jQuery之外,沒有辦法改變它。 –

相關問題