2017-03-11 121 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))