Mengapa undefined dikembalikan oleh .then() dalam Promise Chaining?
Dalam Promise chaining, .then() mengembalikan objek Promise baharu . Walau bagaimanapun, jika tiada nilai atau Promise dikembalikan secara eksplisit daripada panggilan balik .then(), Promise yang terhasil akan diselesaikan kepada undefined.
Pertimbangkan kod berikut:
<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 });</code>
Dalam kod ini, data tidak ditentukan dalam .then() akhir kerana .then() yang pertama tidak mengembalikan sebarang nilai. Untuk membetulkannya, kita boleh mengubah suai .then() pertama untuk mengembalikan nilai hasil:
<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; // Return result to avoid undefined }); } doStuff(9) .then(data => { console.log("data is: " + data); // data is no longer undefined });</code>
Atas ialah kandungan terperinci Mengapa Janji Rantaian Kembali Tidak Ditakrifkan dalam Beberapa Kes?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!