ホームページ > ウェブフロントエンド > jsチュートリアル > .then(function(a){ return a; }) は Promise に対して No-Op ですか?

.then(function(a){ return a; }) は Promise に対して No-Op ですか?

DDD
リリース: 2024-11-13 00:33:02
オリジナル
436 人が閲覧しました

Is .then(function(a){ return a; }) a No-Op for Promises?

.then(function(a){ return a; }) は Promise に対する No-Op ですか?

Promise の領域では.then(function(a){ return a; }) がノーオペレーションであるかどうかという問題が生じます。この興味深いクエリに光を当ててみましょう:

はい、通常は何も操作しません。

問題のコードは、前の Promise の戻り値を受け取ります。 .then() に渡される関数を介してチェーンします。ただし、その関数が単に入力 a を返すだけの場合、Promise の結果の処理や変換は事実上バイパスされます。これにより、Promise パイプラインでは無害ですが不必要な追加ステップになります。

なぜそのように書かれたのですか?

おそらくタイプミスか、以前の誤解の名残です。約束。 Promise が導入されたとき、一部の開発者は、チェーンを継続するには .then() が Promise を返す必要があると誤って信じていました。その結果、入力と同一であっても戻り値が常に Promise のままであることを保証するために、この余分な .then() 呼び出しが追加されました。

Returning .then() と Returning between .then() の違い省略

意味的には同等ですが、.then() を返すことと省略することには微妙な違いがあります:

  • 新しい Promise インスタンス: .then () は新しい Promise インスタンスを作成しますが、省略すると元のインスタンスが再利用されます。ただし、この区別は通常は無関係です。
  • Thenable-ness check: .then() を使用すると、戻り値がチェックされて、それが Promise であるかどうかが判断されます。 .then() を省略すると、このチェックがスキップされます。

エッジケース

まれに、.then(function(a){ return a; }) が発生する可能性があります。異常な動作があります:

  • フルフィルメント後に戻り値が突然 Promise になった場合、.then() はそれを待ちます。
  • これは別個の Promise オブジェクトを返します。これは次の場合に役立ちます。共有回避。ただし、これはニッチな使用例です。

結論

一般に、 .then(function(a){ return a; }) はノーです。 -op は、Promise チェーンに値を追加しません。これは、共有 Promise の回避や、不明瞭な thenable 関連の動作の処理など、使用するやむを得ない理由がない限り、省略する必要があります。

以上が.then(function(a){ return a; }) は Promise に対して No-Op ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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