一尘不染

如何使函数等到使用node.js调用回调后

javascript

我有一个简化的函数,看起来像这样:

function(query) {
  myApi.exec('SomeCommand', function(response) {
    return response;
  });
}

基本上,我希望它调用myApi.exec,并返回在回调lambda中给出的响应。但是,上面的代码不起作用,只是立即返回。

只是出于非常骇人的尝试,我尝试了以下无效的方法,但是至少您了解了我要实现的目标:

function(query) {
  var r;
  myApi.exec('SomeCommand', function(response) {
    r = response;
  });
  while (!r) {}
  return r;
}

基本上,实现此目的的“ node.js /事件驱动”良好方式是什么?我希望我的函数等待,直到调用回调,然后返回传递给它的值。


阅读 260

收藏
2020-04-25

共1个答案

一尘不染

做到这一点的“良好的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
});
2020-04-25