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