ホームページ >ウェブフロントエンド >jsチュートリアル >.then() を Promise に連鎖させるときに未定義の値を回避するにはどうすればよいですか?

.then() を Promise に連鎖させるときに未定義の値を回避するにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-10-19 22:18:29389ブラウズ

How to Avoid Undefined Values When Chaining .then() to Promises?

.then() を Promise にチェーンする: 未定義の値を回避する

複数の .then() メソッドを Promise にチェーンする場合、次のことが重要です。後続の .then() 呼び出しで未定義の値が発生することを避けるために、各 .then() ハンドラーから値または Promise を返します。

あなたの例では:

<code class="javascript">function doStuff(n) {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      resolve(n * 10);
    }, Math.floor(Math.random() * 1000));
  })
  .then((result) => {
    if (result > 100) {
      console.log(result + " is greater than 100");
    } else {
      console.log(result + " is not greater than 100");
    }
  });
}

doStuff(9)
.then((data) => {
  console.log(data); // undefined
});</code>

ここでの問題は、 first .then() ハンドラーは値や Promise を返しません。その結果、2 番目の .then() ハンドラーが呼び出されても、処理するものが何もありません。

これを修正するには、単純に最初の .then() ハンドラーからの結果を返します。

<code class="javascript">function doStuff(n) {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      resolve(n * 10);
    }, Math.floor(Math.random() * 1000));
  })
  .then((result) => {
    if (result > 100) {
      console.log(result + " is greater than 100");
    } else {
      console.log(result + " is not greater than 100");
    }
    return result; // return the result to avoid undefined at next .then()
  });
}

doStuff(9)
.then((data) => {
  console.log("data is: " + data); // data is not undefined
});</code>

これで、2 番目の .then() ハンドラーは最初のハンドラーからの結果をデータ パラメーターとして受け取り、未定義にはなりません。

以上が.then() を Promise に連鎖させるときに未定義の値を回避するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。