我在node.js中有一个简单的代码
async function dbQuery() {
const MongoClient = require('mongodb').MongoClient;
const url = "mongodb://localhost:27017/";
const db = await MongoClient.connect(url);
const dbo = db.db("mydb");
const result = await dbo.collection("tblData").find({}).toArray()
return result;
}
async function doIt() {
try {
const res = await dbQuery();
console.log("Records: " + res.length);
} catch (error) {
console.log(error);
}
}
//
console.log("Starting...")
doIt()
console.log("Done!")
输出是:
Starting...
Done!
Records: 24
如何强制代码等待查询完成?输出如:
Starting...
Records: 24
Done!
答案 0 :(得分:0)
你总是可以使用承诺来完成这项工作。
async function doIt() {
return new Promise((resolve, reject) => {
try {
const res = await dbQuery();
console.log("Records: " + res.length);
resolve();
} catch (error) {
reject(error);
}
});
}
console.log("Starting...")
doIt().then(() => {
console.log("Done!");
})
.catch(err => console.log(err))
答案 1 :(得分:0)
另一个答案是使用Promises,但我不认为这是必要的,您使用的是async
和await
,这是Promise的最新实现。
只需将doIt()
函数调用移至异步调用即可。由于这是节点,并且是非阻塞的,因此这将是更正确的实现。
async function dbQuery() {
const MongoClient = require('mongodb').MongoClient;
const url = "mongodb://localhost:27017/";
const db = await MongoClient.connect(url);
const dbo = db.db("mydb");
const result = await dbo.collection("tblData").find({}).toArray()
return result;
}
async function doIt() {
console.log("Starting...");
try {
const res = await dbQuery();
console.log("Records: " + res.length);
} catch (error) {
console.log(error);
}
console.log("Done!");
}
doIt();
答案 2 :(得分:0)
你只需要通过 await 调用你的 doIt() 函数及其工作..
something...
await doit();
something...