1
我理解JavaScript中的承諾或至少我認爲我確實(糾正我,如果我是錯誤的)。在Mongoose路徑中使用Promise
創建一個承諾:
var promise = new Promise(function(resolve, reject){
// do something async here
if(itWorked){
resolve();
}else {
reject();
}
});
使用承諾:
promise.then(function(result){
},function(err){
});
我有一個基於MEAN堆棧和我的一些貓鼬路線的應用程序正在成爲一個回調地獄。我想擺脫貓鼬路線中的回調,並使用Promises處理它們。但我似乎無法弄清楚究竟該如何做到這一點。
例如:
app.get('/users', function(req, res){
User.findOne(_id, function(err, user){
if(err)
console.log(err)
else if(user){
Receipt.findOne(user.bookName, function(err, book){
if(err)
console.log(err)
else if(book){
// again do something here
}
})
}
})
});
在上面的例子中,你可以看到,代碼越來越難以閱讀和維護。我如何在這裏使用Promises來改進我的代碼?
非常感謝你的回答。我有幾個問題來清除一些概念。在'mongoose.Promise = Promise'這一行中插入原生ES6承諾庫到貓鼬?當_findUser承諾返回時,'then'函數會運行嗎?我猜測術語'返回一個promise'意味着'_findUser'函數是否有'已解析'或'已拒絕'。我對嗎? – Skywalker
準確地說,'mongoose.Promise = Promise'告訴貓鼬使用原生ES6承諾;當你解決'user'時,你可以開始一個新的任務(你注意到了返回嗎?)_findReceipt()_findReceipt()是一個很重要的任務, '。這也是一項繁重的任務,將返回一個「收據」。 **當**你已經解決'收據'時,你已準備好回覆你的回覆。如果** ANY **這些任務產生錯誤,您將執行您的'catch'語句 – Manu
非常感謝您的解釋。我現在主要了解它。出於某種原因,我發現我的頭腦很難承諾。 – Skywalker