如何在Node JS中的回调之外使用变量?

时间:2019-07-18 19:54:49

标签: node.js mongodb

我对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的结果将是“未定义”。

一般如何解决此问题?您如何使用超出特定范围的变量以伪同步方式执行代码?

1 个答案:

答案 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