function authenticateUser(un, pwd){
users.find({username: un}).toArray((err, items) => {
try{
bcrypt.compare(pwd, items[0].password, function(err, result) {
// i want to return this result
});}catch (error){
console.log("")
// in this case i want to return false
}
})
}
如何從這個嵌套函式回傳資料?
uj5u.com熱心網友回復:
您不能在其自身范圍之外使用來自異步函式的資料。您可以在 SO 上閱讀此答案,以更好地了解異步呼叫的作業原理。
您可以更新代碼以使其正常作業。
function authenticateUser(un, pwd, callback) {
users.find({
username: un
}).toArray((err, items) => {
bcrypt.compare(pwd, items[0].password, (err, isMatch) => {
if (err) {
console.log(err)
}
callback(null, isMatch);
})
})
}
然后當你想使用這個功能時,你可以像這樣使用它
authenticateUser(user, enteredPassword, (err, isMatch) => {
if (err) {
console.log(err)
}
if (isMatch) {
console.log(`YAY Password Matched`);
}
uj5u.com熱心網友回復:
你可以使用 Promise 來做到這一點。
function authenticateUser(un, pwd){
return new Promise((resolve, reject) => {
users.find({username: un}).toArray((err, items) => {
if (err) reject(err);
bcrypt.compare(pwd, items[0].password, function(err, result) {
if (err) reject(err);
resolve(result);
// i want to return this result
})
})
})
}
async function main() {
try {
const result = await authenticateUser(un, pwd);
console.log(result);
} catch(e) {
console.error(e);
}
}
如何使用 async/await 檢查這里。
注意:try/catch不適用于回呼。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/441237.html
標籤:节点.js
上一篇:Mongoose$lookup在同一個集合中不起作用
下一篇:延續一對多的關系。如何正確創建?
