Bagaimana untuk Memasukkan setTimeout() dengan Betul ke dalam Rantai Janji?

Susan Sarandon
Lepaskan: 2024-10-31 16:02:02
asal
605 orang telah melayarinya

How to Properly Incorporate setTimeout() into Promise Chains?

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>
Salin selepas log masuk

Kemudian, gunakan fungsi kelewatan dalam janji anda rantai:

<code class="javascript">return delay(1000).then(function() {
    return getLinks(globalObj["two"] + ".txt");
});</code>
Salin selepas log masuk

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan