Merantai .then() kepada Janji: Mengelak Nilai Yang Tidak Ditakrifkan
Apabila merantai pelbagai kaedah .then() kepada Janji, adalah penting untuk kembalikan nilai atau Janji daripada setiap pengendali .then() untuk mengelak daripada menghadapi nilai yang tidak ditentukan pada panggilan .then() berikutnya.
Dalam contoh anda:
<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>
Isu di sini ialah bahawa pertama pengendali .then() tidak mengembalikan sebarang nilai atau Janji. Akibatnya, apabila pengendali .then() kedua dipanggil, ia tidak mempunyai apa-apa untuk digunakan.
Untuk membetulkannya, hanya kembalikan hasil daripada pengendali .then() pertama:
<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>
Kini, pengendali .then() kedua akan menerima hasil daripada pengendali pertama sebagai parameter data dan ia tidak akan ditakrifkan.
Atas ialah kandungan terperinci Bagaimana untuk Mengelakkan Nilai Tidak Ditakrifkan Apabila Merantai .then() kepada Janji?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!