Node.js の Fire and Forget Promise (ES7)
非同期プログラミングでは、結果を待たずにタスクをフォークオフするのが一般的です。 Node.js (ES7) の Promise を使用してこれを行うことはできますか?
質問:
次のコード スニペットを考えてみましょう:
redisClientAsync.delAsync('key'); return await someOtherAsyncFunction();
Can最初の行を待たずに非同期関数でラップしますか?実行するとどうなりますか?
答え:
はい、delAsync 呼び出しを待たずに 2 つの非同期関数を並行して実行できます。 Promise を作成して破棄すると、事実上、Promise を「実行して忘れる」ことになります。
これが理想的ではないのはなぜですか?
このアプローチには重大な欠点があります。 delAsync Promise が拒否された場合は、通知されません。これにより、処理できない拒否エラーや潜在的なクラッシュが発生する可能性があります。
代替アプローチ:
関数を並列実行します: delAsync タスクと someOtherAsyncFunction タスクを同時に実行するには、Promise.all():
var [_, res] = await Promise.all([ someAsyncFunction(), // result is ignored, exceptions aren't someOtherAsyncFunction() ]); return res;
結論:
「ファイアアンドフォーゲット」は便利ですが、潜在的な結果を考慮することが不可欠です。ニーズ (待機、結果処理、例外キャッチ) を明確に定義することで、Node.js アプリケーションでの非同期タスクの適切な処理を確保できます。以上がNode.js (ES7) の約束は「Fire and Forget」を非同期で実装できますか?またそのリスクは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。