await 似乎没有等到异步调用完成
await doesn't seem to wait till the async call is finished
我有使用 await
调用的异步函数,我认为当您使用 await
时,它应该暂停函数执行,直到它收到值。出于某种原因,它对我不起作用。
这是我的函数(它在 class 中):
async userExistsInDB(email) {
let userExists;
await MongoClient.connect('mongodb://127.0.0.1:27017/notificator', async(err, db) => {
if (err) throw err;
let collection = db.collection('users');
userExists = await collection.find({email: email}).limit(1).count() > 0;
console.log("INSIDE:\n", userExists);
db.close();
});
console.log("OUTSIDE:\n", userExists);
return userExists;
}
下面是我在同一 class 中的另一个函数中调用它的方式:
async getValidationErrors(formData) {
let userExists = await this.userExistsInDB(formData.email);
console.log("ANOTHER FUNC:\n", userExists);
}
所以,我得到以下输出:
OUTSIDE:
undefined
ANOTHER FUNC:
undefined
INSIDE:
true
尽管值 INSIDE: true
我希望首先打印出来。
基本上,我需要的是从 userExistsInDB
函数中获取布尔值 userExists
并在其他代码中使用它。
我在这里做错了什么?
await
仅适用于承诺,因此 MongoClient.connect(…)
需要 return 承诺。然而,您将其用作回调 API,甚至使用 async
(promise-returning) 回调函数,这是行不通的。假设 mongo return 承诺如果你不传递回调,你的代码应该看起来像
async function userExistsInDB(email) {
let db = await MongoClient.connect('mongodb://127.0.0.1:27017/notificator');
let collection = db.collection('users');
let userExists = (await collection.find({email: email}).limit(1).count()) > 0;
db.close();
return userExists;
}
尽管理想情况下您更愿意这样做
async function userExistsInDB(email) {
let db = await MongoClient.connect('mongodb://127.0.0.1:27017/notificator');
try {
let collection = db.collection('users');
let userCount = (await collection.find({email: email}).limit(1).count();
return userCount > 0;
} finally {
db.close();
}
}
我有使用 await
调用的异步函数,我认为当您使用 await
时,它应该暂停函数执行,直到它收到值。出于某种原因,它对我不起作用。
这是我的函数(它在 class 中):
async userExistsInDB(email) {
let userExists;
await MongoClient.connect('mongodb://127.0.0.1:27017/notificator', async(err, db) => {
if (err) throw err;
let collection = db.collection('users');
userExists = await collection.find({email: email}).limit(1).count() > 0;
console.log("INSIDE:\n", userExists);
db.close();
});
console.log("OUTSIDE:\n", userExists);
return userExists;
}
下面是我在同一 class 中的另一个函数中调用它的方式:
async getValidationErrors(formData) {
let userExists = await this.userExistsInDB(formData.email);
console.log("ANOTHER FUNC:\n", userExists);
}
所以,我得到以下输出:
OUTSIDE:
undefined
ANOTHER FUNC:
undefined
INSIDE:
true
尽管值 INSIDE: true
我希望首先打印出来。
基本上,我需要的是从 userExistsInDB
函数中获取布尔值 userExists
并在其他代码中使用它。
我在这里做错了什么?
await
仅适用于承诺,因此 MongoClient.connect(…)
需要 return 承诺。然而,您将其用作回调 API,甚至使用 async
(promise-returning) 回调函数,这是行不通的。假设 mongo return 承诺如果你不传递回调,你的代码应该看起来像
async function userExistsInDB(email) {
let db = await MongoClient.connect('mongodb://127.0.0.1:27017/notificator');
let collection = db.collection('users');
let userExists = (await collection.find({email: email}).limit(1).count()) > 0;
db.close();
return userExists;
}
尽管理想情况下您更愿意这样做
async function userExistsInDB(email) {
let db = await MongoClient.connect('mongodb://127.0.0.1:27017/notificator');
try {
let collection = db.collection('users');
let userCount = (await collection.find({email: email}).limit(1).count();
return userCount > 0;
} finally {
db.close();
}
}