This question already has an answer here:
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.
In async world you can't return values. Whatever needs to be done when the value is ready should be executed inside the callback. Another alternative is using promises. You'll need the
es6-promise
package:Now you can use the promise and pass the callbacks that will run once it is resolved:
The above can be shortened:
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
Passing response object