次のような簡略化された関数があります。
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/イベント駆動型」の良い方法は何でしょうか? 関数がコールバックが呼び出されるまで待機し、渡された値を返すようにしたいのです。
ベストアンサー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
});