連鎖された Promise と未定義の値
この場合、連鎖された .then() は値を返さないか、新しいプロミスを作成しません。約束。 doStuff() で作成された外側の Promise が n * 10 の値で解決されると、後続の .then() が呼び出され、その中の式の結果 (ログ ステートメントと潜在的な return ステートメント) がコンソールに記録されます。ただし、このチェーンされた .then() からは実際の値が返されないため、doStuff でそれにチェーンされた後続の .then() は何も受け取りません。したがって、未定義の値になります。
解決策: 値または Promise を返すfrom .then()
この問題を解決するには、.then() コールバックが値を返すか、値または Promise を返す別の関数呼び出しを返すようにします。この変更された例では:
<code class="js">const doStuff = (n /* `n` is expected to be a positive number */) => { 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` to pass it to the next `.then()` return result; }); }; doStuff(9) .then((data) => { console.log("data is: " + data); });</code>
チェーンされた .then() は前の .then() から返された値を受け取るようになり、未定義の問題がなくなりました。出力には、前の .then().
から渡された値が表示されます。以上がChained Promise で未定義の値が発生する原因とその修正方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。