剛學了Nodejs,現在遇到一個問題,不知道如何在函式服務登錄中添加async/await。我今天研究了沒有找到解決方案。請幫我。非常感謝!
用戶服務.js
exports.findUser = async (email, password) => {
var result = null;
User.findOne({
email: email,
password: password,
})
.then((data) => {
if (data) {
result = data;
}
})
.catch((err) => {});
return result;
};
用戶控制器.js
exports.login = (req, res, next) => {
var email = req.body.email;
var password = req.body.password;
var data = userService.findUser(email, password);
console.log(data);
if (data !== null) {
res.status(200).json({ message: "null" });
} else {
res.status(401).json({ message: "Email ho?c m?t kh?u kh?ng ?úng!" });
}
};
uj5u.com熱心網友回復:
解決方案
從userService.js可以看出您正在使用貓鼬。要在 nodejs 中使用異步和等待,您可以像這樣編輯代碼...
exports.findUser = async (email, password) => {
try{
var result = await User.findOne({
email: email,
password: password,
})
return result
}catch(e){
// catch errors and do something
}
}
請注意,我使用了 try 和 catch 塊,以便在await出現任何問題時可以捕獲錯誤。在 await 解決之后,您將回傳一個 mongodb 檔案,與您將在傳遞給 .then 的引數中獲得的相同,在承諾回呼函式中。
uj5u.com熱心網友回復:
異步函式的事情是它允許你await承諾,基本上暫停函式的執行,直到承諾解決。因此,您的代碼可以重寫為:
//userService.js
exports.findUser = async (email, password) => {
var result = null;
try{
result = await User.findOne({
email: email,
password: password,
})
} catch(e){
\\handle error
}
return result;
};
//userController.js
exports.login = async (req, res, next) => {
var email = req.body.email;
var password = req.body.password;
var data = await userService.findUser(email, password);
console.log(data);
if (data !== null) {
res.status(200).json({ message: "null" });
} else {
res.status(401).json({ message: "Email ho?c m?t kh?u kh?ng ?úng!" });
}
};
通過使這兩個函式異步,你可以利用的await關鍵字和承諾,沒有“回呼地獄”,與出現.then()和.catch()諾言。
MDN 檔案
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/374125.html
標籤:javascript 节点.js 异步等待
