NodeJS获取异步返回值(回调) [英] NodeJS get async return value (callback)

查看:1820
本文介绍了NodeJS获取异步返回值(回调)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述



我有这个功能,它记录到控制台,当它运行。
然而,我现在需要这个响应在另一个函数,我很努力这样做。

  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(命令,函数(错误,响应){

console.log(*****响应将转储到控制台:**** *);
// console.log(response);
return response;
});
};

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

  exports.getJobInfoByID = function(req,res){

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



我真的很难把我的头围绕回调,我盯着自己盲目

解决方案

回调不能返回一个值,因为他们返回的代码已经执行。



所以你可以做几件事。一个传递一个回调函数,一旦你的异步函数获取数据调用回调并传递数据。或传递响应对象并将其用于异步函数



传递回调

  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) {
//执行错误检查,如果ok做回调
回调(响应);
});
};

传递响应对象

  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) {
//执行错误检查如果确定发送响应
res.send(response);
});
};


I have read around the internet about callbacks but I just can't understand them in my case.

I have this function, and it logs to console when it runs. However I now need this response in another function and I am struggling to do so.

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

This is where I should get it: (This obviously doesn't work because it doesn't wait for the response.)

exports.getJobInfoByID = function(req, res) {

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

I really struggle to wrap my head around callbacks and I'm staring myself blind here.

解决方案

Callbacks can't return a value as the code they would be returning to has already executed.

So you can do a couple things. One pass a callback function and once your async function gets the data call the callback and pass the data. Or pass the response object and use it in your async function

Passing a callback

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

Passing response object

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

这篇关于NodeJS获取异步返回值(回调)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆