async js 返回值_NodeJS获取异步返回值(回调)

bd96500e110b49cbb3cd949968f18be7.png

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

});

};

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值