【问题标题】:How to pass value from asynchronous function (Node.js) [duplicate]如何从异步函数(Node.js)传递值[重复]
【发布时间】:2018-02-07 16:01:28
【问题描述】:

从我的代码中,我想要在查询后_status 变量中的值并从MongoClient.connect 写入文件,但我从return _status 得到NULL。如何将值传递到函数之外?谢谢你的回答。

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;
}

【问题讨论】:

标签: javascript node.js asynchronous callback


【解决方案1】:

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

请参阅here 以了解有关承诺的更多信息。

【讨论】:

    【解决方案2】:

    试试类似的方法

    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);
    });
    

    【讨论】:

      猜你喜欢
      • 2017-07-19
      • 1970-01-01
      • 2015-12-01
      • 2020-05-22
      • 2020-09-12
      • 2016-03-07
      • 1970-01-01
      • 1970-01-01
      • 2020-01-04
      相关资源
      最近更新 更多