ノードの非同期/コールバック ベースのメソッドをブロッキング/同期メソッドに変換することは可能ですか?
「解決すべき問題がある」というPOVよりも、理論的なPOVに興味があります。
Qなどを介してコールバック メソッドを値に変換する方法はわかりますが、呼び出しによって実行がブロックされることはありません。Q.done()
お勧めしませんが、これはある種の忙しい待機を使用して簡単に行うことができます。例えば:
var flag = false;
asyncFunction( function () { //This is a callback
flag = true;
})
while (!flag) {}
while ループは、コールバックが実行されるまで継続的にループするため、実行がブロックされます。
ご想像のとおり、これを行うとコードが非常に厄介になるため、これを行う場合 (お勧めしません)、非同期関数をラップする何らかのヘルパー関数を作成する必要があります。スロットルなどの Underscore.js の Function 関数に似ています。注釈付きのソースを見ると、これらがどのように機能するかを正確に確認できます。
node-syncモジュールはそれを行うのに役立ちます。ただし、注意してください。これは node.js の方法ではありません。