gpt4 book ai didi

node.js - 等待 MongoDB 完成查询而不使用回调

转载 作者:太空宇宙 更新时间:2023-11-03 23:21:38 25 4
gpt4 key购买 nike

我对 Node.js 中的异步编程模型有疑问。

我知道以前有人问过这个问题,但到目前为止我还没有找到任何可以用来解决我的问题的东西。

如何在调用 dbQueryNameusername 从中获取其值之前强制 console.log 运行?

var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/";

function dbQueryName() {
MongoClient.connect(url, function(err, db) {
if (err) throw err;
var dbo = db.db("mydb");

dbo.collection("users").findOne({}, function(err, result) {
if (err) throw err;

return result.name
db.close();
});
});
}

var username = dbQueryName();

// Wait until dbQueryName() has been invoked and username has gotten its value before running this
console.log(username);

我已经设法使用函数中的callback参数让它工作,但是有没有办法用更少的代码和缩进来做到这一点?

function dbQueryName(callback) {
MongoClient.connect(url, function(err, db) {
if (err) throw err;
var dbo = db.db("mydb");

dbo.collection("users").findOne({}, function(err, result) {
if (err) throw err;

callback(result.name)
db.close();
});
});
}


dbQuery(function(result){
var username = result
console.log(username);
});

最佳答案

是的,如果您没有将回调传递给 MongoClient.connect 或 collection.findOne,它会返回一个 promise 。

但是你需要添加另一个函数来使用 async wait

init()


async function dbQueryName() {
const db = await MongoClient.connect(url);
const dbo = db.db("mydb");


const user = await dbo.collection("users").findOne({})
return user.name
}
async function init() {
try {
const name = await dbQueryName()
} catch (error) {
console.log(error);
}
}

关于node.js - 等待 MongoDB 完成查询而不使用回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49048484/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com