Promise にチェーンされた .then() が Unknown を返す理由
以下のコード スニペットを考えてみましょう:
<code class="js">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, why? });</code>
2 番目の .then() コールバックでデータの値が定義されていないのはなぜですか?
答え:
.then() コールバックを Promise にチェーンすると、コールバックの戻り値に解決される新しい Promise を返します。ただし、提供されたコードでは、最初の .then() から値または Promise が返されません。
解決策:
問題を解決するには、次のコードを返す必要があります。値を取得するか、最初の .then() から値または Promise を返す別の関数を呼び出します。コードの更新バージョンは次のとおりです。
<code class="js">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` here to avoid undefined at chained `.then()`. return result; }); } doStuff(9) .then((data) => { console.log(`data is: ${data}`); // data is not undefined });</code>
この更新されたコードでは、最初の .then() は result の値 (n を 10 倍したもの) を返します。これにより、2 番目の .then() は確実に結果を受け取ります。引数として定義された値。
以上がPromise にチェーンされた .then() が Unknown を返すのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。