一尘不染

NodeJS获取异步返回值(回调)

node.js

我在互联网上读过有关回调的信息,但就我而言我还是听不懂。

我具有此功能,并且在运行时会记录到控制台。但是,现在我需要在另一个功能中使用此响应,而我正在努力做到这一点。

var asyncJobInfo = function(jobID, next) {

    var oozie = oozieNode.createClient({ config: config });

    var command = 'job/' + jobID + '?show=info';

    console.log("running oozie command: " + command);

    oozie.get(command, function(error, response) {

    console.log("*****response would dump to console here:*****");
//  console.log(response);
    return response;
    });
};

这是我应该得到的地方:(这显然不起作用,因为它不等待响应。)

exports.getJobInfoByID = function(req, res) {

    var jobIDParam = req.params.id;
    res.send(asyncJobInfo(jobIDParam));
}

我真的很难把头放在回调上,我在这里盯着自己瞎了。


阅读 861

收藏
2020-07-07

共1个答案

一尘不染

回调无法返回值,因为它们将要返回的代码已经执行。

因此,您可以做几件事。一个传递回调函数,异步函数获取数据后,调用回调并传递数据。或传递响应对象并在异步函数中使用它

传递回调

exports.getJobInfoByID = function(req, res) {
    var jobIDParam = req.params.id;
    asyncJobInfo(jobIDParam,null,function(data){
       res.send(data);
    });
}

var asyncJobInfo = function(jobID, next,callback) {
    //...
    oozie.get(command, function(error, response) {
       //do error check if ok do callback
       callback(response);
    });
};

传递响应对象

exports.getJobInfoByID = function(req, res) {
    var jobIDParam = req.params.id;
    asyncJobInfo(jobIDParam,null,res);
}

var asyncJobInfo = function(jobID, next,res) {
    //...
    oozie.get(command, function(error, response) {
       //do error check if ok do send response
       res.send(response);
    });
};
2020-07-07