[英]How do I chain promises and catch in Node.js
我正在嘗試根據收到的請求插入一個新文檔,這就是我正在嘗試執行的操作。
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無限期掛起,而不會還原之前所做的更新。
在將新文檔插入DB時出錯的情況下,使用還原功能可以很好地解決問題。
由於ref.function(value)
后接帶有then
的return k
,因此catch
塊可能僅在ref.function
拒絕promise和下面的塊中的錯誤(在ref.function
之后)時捕獲錯誤。
.then((k)=>{ // invoke for computation
return(k);
})
嘗試在ref.function
Promise.resolve
之前添加ref.function
return Promise.resolve(
() => {
return ref.function(value);
}).then(
k => {
...
}).catch(
err => {
updateDB.updateOne({query}).then((doc)=>{}) //revert back the update done earlier incase of error when invoked function has an error (2)
callBack(err);
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.