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上的交易这是我能想到的最接近的事情。请看一看,它允许您观察单个结果。这给了我一个很好的方向如何做谢谢