我刚开始在节点应用程序中使用Promise
。而且我相信,如果其中一个返回错误,则循环下面的代码将中断,并被拒绝。
有没有办法让循环结束,跳过有错误的循环。而且我仍然希望循环结束时有所有错误通知。
另一个问题:是否有更好的方法来使用resolve
而不是使用count++; if(count===items.length) resolve(items)
get_customer_purchase = (items) => {
return new Promise((resolve, reject)=>{
let count = 0;
for (let i in items) {
get_options(items[i].id).then((options)=>{
//do some process
count++; if(count===items.length) resolve (items)
}).catch((error)=>reject(error))
}
})
}
答案 0 :(得分:0)
您可以这样写:
get_customer_purchase = (items) => {
const promiseArray = items.map((item) => {
return get_options(item.id)
})
return Promise.all(promiseArray)
.then((optionsResult) => items)
}
请注意,如果一个get_options
将失败,您将收到一次失败:
get_customer_purchase(array)
.then(items => /** do stuff */ )
.catch(error => /** one get_options fail */ )
如果您想忽略某些get_options
的错误,可以简单地进行更改:
return get_options(item.id).catch(err => {return null})
,然后在.filter
中使用optionsResult
函数:
.then((optionsResult) => optionsResult.filter(_ => _!==null))