Rumah >hujung hadapan web >tutorial js >Bagaimana untuk Memasukkan setTimeout() dengan Betul ke dalam Rantai Janji?
Menggunakan setTimeout() dalam Promise Chains
Apabila bekerja dengan janji, adalah penting untuk memahami cara mengendalikan operasi tak segerak dalam rantai janji. Dalam coretan kod yang diberikan, niatnya adalah untuk menangguhkan pelaksanaan permintaan seterusnya dalam rantaian janji. Walau bagaimanapun, menggunakan setTimeout() terus dalam pengendali .then() boleh membawa kepada isu.
Mengapa setTimeout() Gagal
Dalam kod anda, setTimeout() ialah digunakan dalam pengendali .then() permintaan kedua. Walau bagaimanapun, pendekatan ini memecahkan rantai janji kerana nilai yang dikembalikan pengendali .then() bukan janji. Panggilan balik setTimeout(), yang mengandungi janji yang anda mahu rantai, tidak boleh diakses di luar konteksnya sendiri.
Penyelesaian Menggunakan Fungsi kelewatan
Untuk mengekalkan rantai janji , anda boleh mencipta fungsi kelewatan berasingan yang mengembalikan janji:
<code class="javascript">function delay(t, val) { return new Promise(resolve => setTimeout(resolve, t, val)); }</code>
Kemudian, gunakan fungsi kelewatan dalam janji anda rantai:
<code class="javascript">return delay(1000).then(function() { return getLinks(globalObj["two"] + ".txt"); });</code>
Ini mengembalikan janji daripada pengendali .then(), yang memastikan bahawa pelaksanaan permintaan seterusnya ditangguhkan.
Alternatif Menggunakan Promise.prototaip. kelewatan
Pilihan lain ialah memanjangkan objek Promise dengan kelewatan kaedah:
<code class="javascript">Promise.prototype.delay = function(t) { return this.then(function(val) { return delay(t, val); }); }</code>
Dengan kaedah ini, anda boleh menghubungi terus .delay() pada janji anda:
<code class="javascript">Promise.resolve("hello").delay(500).then(function(val) { console.log(val); });</code>
Kedua-dua pendekatan memastikan rantai janji dikekalkan dengan betul dan permintaan seterusnya dilaksanakan selepas kelewatan yang ditentukan.
Atas ialah kandungan terperinci Bagaimana untuk Memasukkan setTimeout() dengan Betul ke dalam Rantai Janji?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!