首页 > 解决方案 > 尽管有错误,如何防止 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))
    }    
  })
}

标签: node.jspromise

解决方案


你可以这样写:

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))

推荐阅读