node.js - 尽管有错误,如何防止 Promise 循环中断
问题描述
我刚开始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))
}
})
}
解决方案
你可以这样写:
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))
推荐阅读
- javascript - 输入值未呈现到 React Hooks 中的另一个组件
- sql - 从 SQL 表中查找部分和完全重复
- php - 当它们共享相同的数组键时,如何阻止数组结果被合并?
- python - 如何发送带有请求的 HTTP/2 伪标头?
- java - A Star 算法中如何标记最终的最短路径?
- git - 是否有 git 命令可以将当前状态描述为“branch/short_commit_hash”
- php - 将查询数据插入到相同的 sql 查询中
- python - 右移一个numpy数组会改变dtype?
- swift - 如何在 Swift 中将像素尺寸转换为 CG 尺寸?
- python - 试图在 div 中抓取 div 中的元素,但无法弄清楚