我在互联网上读过有关回调的信息,但就我而言我还是听不懂。
我具有此功能,并且在运行时会记录到控制台。但是,现在我需要在另一个功能中使用此响应,而我正在努力做到这一点。
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)); }
我真的很难把头放在回调上,我在这里盯着自己瞎了。
回调无法返回值,因为它们将要返回的代码已经执行。
因此,您可以做几件事。一个传递回调函数,异步函数获取数据后,调用回调并传递数据。或传递响应对象并在异步函数中使用它
传递回调
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); }); };