Javascript 如何在Promise all error中获得结果数组

Javascript 如何在Promise all error中获得结果数组,javascript,promise,Javascript,Promise,有没有办法在Promise.all.catch上获取结果对象 我想在数据库中插入两个,一个在MySQL数据库中,一个在MongoDB数据库中。如果其中一个失败,我想删除另一个 下面是一些伪代码 const mysqlPromise=mysql.query('insert to table') const mongoPromise=mongodb.insert('insert to collation') Promise.all([mysqlPromise,mongoPromise]) 。然后(

有没有办法在
Promise.all.catch
上获取结果对象

我想在数据库中插入两个,一个在MySQL数据库中,一个在MongoDB数据库中。如果其中一个失败,我想删除另一个

下面是一些伪代码

const mysqlPromise=mysql.query('insert to table')
const mongoPromise=mongodb.insert('insert to collation')
Promise.all([mysqlPromise,mongoPromise])
。然后(结果=>{
})
//我知道这样不行,但这正是我需要实现的
.catch((错误,结果)=>{
如果(错误[0]&错误[1]){
//无所事事
返回
}
如果(错误[0]){
delete({u id:result[1].insertId})
}
否则{
query('delete from table where id='结果[0].lastInsertId)
}

})
我不认为你想要的东西真的可以按原样提供,但是你可以先操纵你的承诺,然后在
所有
操作员:

Promise.all([
  mysqlPromise.catch(err => new Error('mysql failed')),
  mongoPromise.catch(err => new Error('mongo failed')),
])
.then(result => {
  const mysqlFailed = result[0] instanceof Error;
  const mongoFailed = result[1] instanceof Error;

  if (mysqlFailed && mongoFailed) {
    // nothing
  } else if (mysqlFailed){
    mongodb.delete({_id:result[1].insertId})
  } else if (mongoFailed) {
    mysql.query('delete from table where id = 'result[0].lastInsertId)
  } else {
    // success
  }
})

如果删除也失败了怎么办?:)我可以做一个循环,每x秒重试一次,这并不完美,但我可以接受这种情况发生的几率很低。我试图实现的是在两个不同的dbs上的交易这是我能想到的最接近的事情。请看一看,它允许您观察单个结果。这给了我一个很好的方向如何做谢谢