私は Javascript の Promises に比較的慣れていませんが、最近、特に Bluebird ライブラリーでの Promises の優雅さに惚れ込んでいます。
これはおそらく初心者の質問ですが、通常は同期関数を非同期で実行するように変換するにはどうすればよいですか? たとえば、Math.random()*RANGE
並列で 30 回計算したい場合、Promise (Q または Bluebird) でどのように正確に計算できますか?
私は Javascript の Promises に比較的慣れていませんが、最近、特に Bluebird ライブラリーでの Promises の優雅さに惚れ込んでいます。
これはおそらく初心者の質問ですが、通常は同期関数を非同期で実行するように変換するにはどうすればよいですか? たとえば、Math.random()*RANGE
並列で 30 回計算したい場合、Promise (Q または Bluebird) でどのように正確に計算できますか?
それはいけません。Promise は「コードを並列にする」のではなく、非同期コードの抽象化を向上させるだけです。コールバックよりも強力ではありません。
同期コードは常に同期的に実行され、JavaScript のシングルスレッドの性質により、並列化できません。実際に非同期関数を使用して実行が延期されるコールバックを指定したとしても、コールバックを後のイベント ループ スライスに延期するだけで、同期タスクを他のものと並行して実行することはありません。どちらかを高速に実行します。実行時間の長いコードをチャンクに分割するだけで (ここまたはここを参照)、アプリがより速く感じられるようになります。
できることは、別のスレッド ( WebWorker、ノード クラスターなど) でコードを実行し、イベントを使用して結果を返すことです。これらのイベントについては、適切なプロミスの抽象化をコーディングできます。しかし真剣に、30 個の乱数を生成するには、スレッドのオーバーヘッドが大きすぎます。