2014-07-15 67 views
0

是否有這樣的事情作爲mpromise/mongoose的when子句?我正在尋找做這件事,而不必寫我自己的包裝爲mpromise。需要jQuery的「當」功能爲mpromise/mongoose

$.when(jQueryPromise1,jQueryPromise3,jQueryPromise3).done(function(r1,r2,r3) { 
    // success code 
}.fail(function(err1,err2,err3) { 
    //failure code 
}); 

我意識到鏈存在,那不是我想要的。我正在尋找在所有承諾完成時都會執行的mpromise/mongoose機制。

+0

爲什麼鏈接是不是你想要的你能解釋一下嗎?我對這個圖書館不熟悉;鏈接是否導致承諾順序解決而不是準備好? – Mathletics

+0

是的,鏈接導致承諾順序解決,當我需要它們並行解決。我的應用程序在執行下一個承諾之前不需要一個承諾的答案,但我需要在執行結束時立即執行所有結果。 –

回答

0

這裏時的樣本實現:

function when(/* promise list */) { 
    var promises = [].slice.call(arguments), 
     whenPromise = new Promise, 
     results = new Array(promises.length), 
     remaining = promises.length, 
     done = false, 
     finish = function() { 
      done = true; 
     }; 

    whenPromise.onFulfill(finish).onReject(finish); 

    promises.forEach(function(promise) { 
     promise.onFulfill(function(result) { 
      if (!done) { 
       // index of result should correspond to original index of promise 
       results[promises.indexOf(promise)] = result; 
       if (--remaining == 0) { 
        // fulfill when all are fulfilled 
        whenPromise.fulfill.apply(whenPromise, results); 
       } 
      } 
     }).onReject(function(err) { 
      if (!done) { 
       // reject when one is rejected (a la jQuery) 
       whenPromise.reject(err); 
      } 
     }); 
    }); 
} 
+0

我希望有一個本地解決方案,但我沒有找到一個。我不得不寫我自己的,但作爲你的作品,這裏有一些觀點。 –

+0

謝謝,我很想看到你的解決方案,如果你想分享 –

+0

https://gist.github.com/thinkingsites/9a4b4fe05a86c5dad210它利用我已經使用的軟件包,所以它使用JQDeferred來實現何時。功能的主要區別在於我可以傳遞一個數組或一系列參數作爲承諾列表,但這並不是什麼幻想,我經常需要傳遞動態數組promise。 –