假設我想運行一個條件是異步函式的 if 陳述句。
const con = require('./con');
if(con.con('[email protected]')
console.log('User exists!')
else {
console.log('user does not exist?')
}
這是函式,它使用 mongoose findOne 這是一個異步任務。
const User = require ('../nodeDB/models/user.js');
const con = function (email) {
User.findOne( { userEmail: email }, function (err, doc) {
if(err) {
console.log(err);
}
if (doc) {
return false;
} else {
return true;
}
});
}
module.exports.con = con;
問題是 if 陳述句在 con 可以執行之前被呼叫,然后不會設定條件。
uj5u.com熱心網友回復:
你可以這樣做:
const con = userEmail => User.findOne({userEmail}).lean().exec();
(async () => {
if (await con('[email protected]')) {
console.log('User exists!')
} else {
console.log('user does not exist?')
}
})()
User.findOne從你的函式中回傳。
(可選) 2. 添加它.lean()(回傳簡單的 JSON,更快)
(可選) 3. 添加它.exec()以便它回傳一個真正的 Promise 而不僅僅是一個 thenable
- 現在你可以簡單地
await con()在async函式內的任何地方,就好像它是同步的一樣。
uj5u.com熱心網友回復:
使用await或將您的邏輯放在then塊中。
// must be in async declared function
if (await foo()) {
}
else {
}
or
foo().then(res=>{
if (res) {
}
else {
}
})
uj5u.com熱心網友回復:
首先,您的con()函式不回傳任何內容。你需要return User.findOne(....)
您的 if 陳述句需要尊重異步任務必須首先完成的事實。
con.con('[email protected]')
.then((exists) => {
if (exists)
console.log('User exists!')
else {
console.log('user does not exist?')
}
})
或與aynsc/ await:
async function checkIfUserExists() {
if (await con.con('[email protected]')
console.log('User exists!')
else {
console.log('user does not exist?')
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/358607.html
標籤:javascript 节点.js 猫鼬
上一篇:請求引數回傳未定義
下一篇:如何為以下替換添加條件?
