我有一个简化的函数,如下所示:
function(query) { myApi.exec('SomeCommand', function(response) { return response; }); }
基本上我希望它调用myApi.exec,并返回在回调 lambda 中给出的响应。但是,上面的代码不起作用,只是立即返回。
myApi.exec
只是为了一个非常骇人听闻的尝试,我尝试了以下没有用的方法,但至少你明白我想要实现的目标:
function(query) { var r; myApi.exec('SomeCommand', function(response) { r = response; }); while (!r) {} return r; }
基本上,有什么好的“node.js/event 驱动”方式来解决这个问题?我希望我的函数等到回调被调用,然后返回传递给它的值。
这样做的“好的 node.js /事件驱动”方式是 不等待 。
像使用节点等事件驱动系统时的几乎所有其他东西一样,您的函数应该接受一个回调参数,该参数将在计算完成时调用。调用者不应等待正常意义上的“返回”值,而是发送将处理结果值的例程:
function(query, callback) { myApi.exec('SomeCommand', function(response) { // other stuff here... // bla bla.. callback(response); // this will "return" your value to the original caller }); }
所以你不要这样使用它:
var returnValue = myFunction(query);
但是像这样:
myFunction(query, function(returnValue) { // use the return value here instead of like a regular (non-evented) return value });