我对node js不切实际。我有以下代码:
rows
我想在MongoClient.connect()范围之外使用变量“ data”。问题应该在于使用了回调函数,因此它是异步执行的。
如果我做这样的事情:
var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/";
MongoClient.connect(url, function(err, db) {
if (err) throw err;
var dbo = db.db("mydb");
dbo.collection("test").findOne(
{},
{ sort: { _id: -1 } },
(err, data) => {
console.log(data);
},
);
db.close();
});
x的结果将是“未定义”。
一般如何解决此问题?您如何使用超出特定范围的变量以伪同步方式执行代码?
答案 0 :(得分:0)
您可以使用async并等待将该异步代码转换为同步代码
var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/";
var x;
(async ()=>{
await MongoClient.connect(url, (err, db) => {
if (err) throw err;
var dbo = db.db("mydb");
dbo.collection("test").findOne(
{},
{ sort: { _id: -1 } },
(err, data) => {
console.log(data);
x = data;
},
);
db.close();
});
})();
console.log(x);
了解更多信息
https://tylermcginnis.com/async-javascript-from-callbacks-to-promises-to-async-await/ https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function