2017-03-11 118 views
0

我對此還是比較陌生的,也許promise.all()不是我所需要的,或者我只是以這種錯誤的方式開始,但我有一堆資源,我試圖通過HTTP來獲取。如何解決Promise.all()儘管有一些拒絕?

其中一些帳戶類型不適用於某些帳戶類型,因此我想,讓那些因服務器端權限失敗而失敗的人失敗,然後繼續使用它。

promise.all([ 
    http.get('bookings'), 
    http.get('users'), 
    http.get('listings') 
]) 
.then(valuse => assign(values)) 
.catch(err => makeAnError(err)) 

因此,假設http.get('users')失敗,則promise.all將拒絕並沒有其他的值將被指定爲決心功能分配從來沒有運行這些值。

這是什麼建議的解決方案?

+0

答案很簡單,處理個別拒絕 –

+0

的'async'包節點有可能會使用一些很好的控制流能力,特別是'async.series'函數。 –

+0

@m_callens - 'asyncjs + Promises ==糟糕的設計'(我不是指async/await) - 另外,'async.series'執行串行操作,而問題中的代碼並行執行它們就像js中可能的那樣) –

回答

0

我做這種方式

Promise.prototype.always = function always() { 
    return this.then(result=>({fulfilled: true, result}), reason=>({fulfilled: false, reason})); 
}; 

那麼你的代碼

promise.all([ 
    http.get('bookings').always(), 
    http.get('users').always(), 
    http.get('listings').always() 
]) 
.then(values => assign(values)) // assign needs to check each value.fulfilled == true before using value.result 
.catch(err => makeAnError(err))