我正在尝试根据收到的请求插入新文档,这就是我正在尝试做的事情。
var function = (req,callBack)=>{
queryDB.findOne({query}).then((result)=>{
return(result); // see if requested object exists in DB and return if yes
}).then((result)=>{
if(condition:if required object exists){
updateDB.updateOne({query}).then((result)=>{ //update required object with new values
if(condition:update successful){
ref.function(value).then((k)=>{ // invoke for computation
return(k);
}).then((k)=>{
var document = new Document({ //create a new document
....
....
....
....
....
});
document.save().then((doc)={
callBack(doc); //return new document after successful insert
}).catch((err)=>{
updateDB.updateOne({query}).then((doc)=>{}) //revert back the update done earlier incase of error while inserting new document
callBack(err);
});
}).catch((error)=>{
updateDB.updateOne({query}).then((doc)=>{}) //revert back the update done earlier incase of error when invoked function has an error (2)
callBack(err);
})
}
}).catch((errorMessage)={
callBack(errorMessage);
})
}else{
callBack("Required Object Doesn't Exist");
}
}).catch((errorMessage)=>{
callBack(errorMessage);
})
}
我期望的行为是,如果ref.function中有错误,它应该还原更新并发回错误消息,但是API无限期挂起,而不会还原先前完成的更新。
在将新文档插入数据库时发生错误的情况下,还原操作可以正常工作。
答案 0 :(得分:0)
由于ref.function(value)
后跟带有then
的{{1}},因此,return k
块可能仅在catch
拒绝承诺和错误时捕获错误。下面的代码块(ref.function
之后)
ref.function
尝试在.then((k)=>{ // invoke for computation
return(k);
})
之前添加Promise.resolve
ref.function