Rumah  >  Artikel  >  hujung hadapan web  >  Bagaimana untuk Memasukkan setTimeout() dengan Betul ke dalam Rantai Janji?

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

Susan Sarandon
Susan Sarandonasal
2024-10-31 16:02:02539semak imbas

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>

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!

Kenyataan:
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