Rumah >hujung hadapan web >tutorial js >Bagaimana untuk Mengubah Fungsi `setTimeout` menjadi Janji?

Bagaimana untuk Mengubah Fungsi `setTimeout` menjadi Janji?

Patricia Arquette
Patricia Arquetteasal
2024-11-25 01:42:18197semak imbas

How to Turn a `setTimeout` Function into a Promise?

Cara Mengubah setTimeout menjadi Promise

Tugas mencipta janji untuk fungsi yang tidak mengembalikan apa-apa, seperti setTimeout, pada mulanya boleh mencabar. Untuk memahami konsep ini, mari rujuk contoh kod yang diubah suai:

<br>fungsi async(panggilan balik){</p>
<pre class="brush:php;toolbar:false">setTimeout(function(){
    callback();
}, 5000);

}

async(function(){

console.log('async called back');

});

Matlamat kami adalah untuk menjana janji bahawa async boleh kembali setelah panggilan balik setTimeout selesai sedia.

Kelambatan Asas dengan Janji

Menggunakan janji asli, kita boleh mencipta fungsi yang dipanggil kemudian seperti berikut:


berfungsi kemudian (kelewatan) {

return new Promise(function(resolve) {
    setTimeout(resolve, delay);
});

}

Fungsi ini mengambil masa kelewatan dalam milisaat dan mengembalikan janji yang diselesaikan selepas kelewatan tamat tempoh.

< ;h3>Lengah Asas dengan Value

Untuk mengubah suai kemudian dan membenarkannya melepasi nilai resolusi, kita perlu memastikan panggilan balik setTimeout menerima nilai sebagai hujah. Untuk penyemak imbas yang menyokong menyediakan hujah tambahan untuk setTimeout, kod berikut boleh digunakan:


fungsi kemudian(kelewatan, nilai) {

return new Promise(function(resolve) {
    setTimeout(resolve, delay, value);
});

}

Kod ini memastikan bahawa nilai dihantar ke panggilan balik dan seterusnya diselesaikan dengan janji.

Kelewatan Boleh Dibatalkan dengan Nilai

Untuk kes di mana kami ingin memberikan keupayaan untuk membatalkan tamat masa, kami boleh mencipta objek dengan kaedah membatalkan dan pelengkap untuk janji. Apabila kaedah pembatalan dipanggil, ia mengosongkan tamat masa dan menolak janji:

<br>const later = (kelewatan, nilai) => {</p>
<pre class="brush:php;toolbar:false">let timer = 0;
let reject = null;
const promise = new Promise((resolve, _reject) => {
    reject = _reject;
    timer = setTimeout(resolve, delay, value);
});
return {
    get promise() { return promise; },
    cancel() {
        if (timer) {
            clearTimeout(timer);
            timer = 0;
            reject();
            reject = null;
        }
    }
};

};

Pendekatan ini menyediakan cara untuk membatalkan tamat masa yang belum selesai dan menolak janji yang berkaitan.

Atas ialah kandungan terperinci Bagaimana untuk Mengubah Fungsi `setTimeout` menjadi 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