首页 > 解决方案 > 处理异步/等待中的链式承诺错误

问题描述

下面的代码应该将各种文件保存到数据库中,但如果一个文件失败,其他文件仍然保存但返回错误。如果没有保存任何数据或未保存列表中的一个数据,我该如何解决这种情况以显示错误消息?

 try{
   await Promise.all([
      data1.save(), 
      data2.save(),
      .....
   ])
 }
 catch(ex){
   success: false,
   error: ex
 }

标签: javascriptmongodbtypescript

解决方案


您可以捕获各个save()函数的错误,然后返回它们或一些值来指示错误。然后Promise.all()将收集错误和结果一起供您稍后处理:

function save(n){
    // rejects on 'bad' input
    return n == "bad" ? Promise.reject("error") : Promise.resolve("worked")
}
async function saveThings() {
    try{
        let res = await Promise.all([
            save('good').catch((err) => err), 
            save('bad').catch((err) => err),
            save('good').catch((err) => err),
        ])
        return res

    } catch(err){
        console.log(err)
    } 
}
saveThings()
.then(console.log)


推荐阅读