1. ホーム
  2. ジャバスクリプト

[解決済み】node.jsでコールバックが呼ばれるまで関数を待機させる方法

2022-03-29 13:16:58

質問

次のような簡易的な関数があります。

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

基本的に、私はそれが呼び出したい myApi.exec そして、コールバックラムダで与えられた応答を返します。しかし、上記のコードは動作せず、単に即座に返されます。

非常にハック的な試みとして、以下のようなものを試しましたが、うまくいきませんでした。

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

基本的に、良い「node.js/イベントドリブン」な方法は何でしょうか?私は、コールバックが呼び出されるまで私の関数が待機し、その後、それに渡された値を返したい。

解決するには?

node.js /event driven"な方法は、以下の通りです。 待たない .

nodeのようなイベント駆動型システムで作業するときのほとんどすべてのものと同様に、あなたの関数は、計算が完了したときに呼び出されるコールバックパラメータを受け入れる必要があります。呼び出し側は、通常の意味での「quot;return" 」が返されるのを待つのではなく、結果の値を処理するルーチンを送信する必要があります。

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