ホームページ > ウェブフロントエンド > jsチュートリアル > Node.js (ES7) の約束は「Fire and Forget」を非同期で実装できますか?またそのリスクは何ですか?

Node.js (ES7) の約束は「Fire and Forget」を非同期で実装できますか?またそのリスクは何ですか?

Susan Sarandon
リリース: 2024-11-27 13:23:18
オリジナル
778 人が閲覧しました

Can Node.js (ES7) Promises Implement

Node.js の Fire and Forget Promise (ES7)

非同期プログラミングでは、結果を待たずにタスクをフォークオフするのが一般的です。 Node.js (ES7) の Promise を使用してこれを行うことはできますか?

質問:

次のコード スニペットを考えてみましょう:

redisClientAsync.delAsync('key');
return await someOtherAsyncFunction();
ログイン後にコピー

Can最初の行を待たずに非同期関数でラップしますか?実行するとどうなりますか?

答え:

はい、delAsync 呼び出しを待たずに 2 つの非同期関数を並行して実行できます。 Promise を作成して破棄すると、事実上、Promise を「実行して忘れる」ことになります。

これが理想的ではないのはなぜですか?

このアプローチには重大な欠点があります。 delAsync Promise が拒否された場合は、通知されません。これにより、処理できない拒否エラーや潜在的なクラッシュが発生する可能性があります。

代替アプローチ:

  • 約束を待つ:副作用や例外が発生した場合は、約束を待つ必要があります。ただし、その結果が必要ない場合は、 void (await someAsyncFunction()) を使用して結果を破棄できます。
  • 例外のキャッチ: 結果は気にしないが必要な場合は、例外をキャッチするには、 ...someAsyncFunction().catch(functionignore() を使用できます。 {})....
  • 関数を並列実行します: delAsync タスクと someOtherAsyncFunction タスクを同時に実行するには、Promise.all():

    var [_, res] = await Promise.all([
      someAsyncFunction(), // result is ignored, exceptions aren't
      someOtherAsyncFunction()
    ]);
    return res;
    ログイン後にコピー
    この場合、delAsync の結果は無視されますが、例外は依然として発生します。

結論:

「ファイアアンドフォーゲット」は便利ですが、潜在的な結果を考慮することが不可欠です。ニーズ (待機、結果処理、例外キャッチ) を明確に定義することで、Node.js アプリケーションでの非同期タスクの適切な処理を確保できます。

以上がNode.js (ES7) の約束は「Fire and Forget」を非同期で実装できますか?またそのリスクは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート