如何从异步函数传递值(Node.js)

时间:2018-02-07 07:31:26

标签: javascript node.js asynchronous callback

从我的代码开始,我希望查询后的_status变量中的值和来自MongoClient.connect的文件,但我从NULL获得return _status。如何在函数外传递值?谢谢你的回答。

function query(domain)
{
        var _status;
        MongoClient.connect(url, function(err, db) {
                if (err) throw err;
                db.collection("zone").find({"name" : domain}).toArray(function(err, result) {
                        if (!err) {
                                fs.writeFile('/root/'+domain+'.txt', result, function (err) {
                                        if (err) throw err;
                                });
                                _status = "success";
                        }
                        else {
                                _status = "fail";
                        }
                });
                db.close();
        });
        return _status;
}

2 个答案:

答案 0 :(得分:1)

您正在函数查询中调用异步函数(MongoClient.connect,.find),并尝试同步获取结果(_status)。这不起作用。您可以使用基于回调的方法或基于承诺的方法来让调用者知道_status的值。

有关承诺的更多信息,请参阅here

答案 1 :(得分:0)

尝试类似的东西

function query(domain, callback)
{
    var _status;
    MongoClient.connect(url, function(err, db) {
        if (err) throw err;
        db.collection("zone").find({"name" : domain}).toArray(function(err, result) {
            if (!err) {
                fs.writeFile('/root/'+domain+'.txt', result, function (err) {
                        if (err) throw err;
                });
                _status = "success";
            }
            else {
                _status = "fail";
            }
            callback(_status);
        });
        db.close();
    });
}

query(domain, (status) => {
    // Synchronous
    // do something
    console.log(status);
});