Bagaimana untuk Mengubah Fungsi `setTimeout` menjadi Janji?

Patricia Arquette
Lepaskan: 2024-11-25 01:42:18
asal
127 orang telah melayarinya

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>
<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">setTimeout(function(){
    callback();
}, 5000);
Salin selepas log masuk

}

async(function(){

console.log('async called back');
Salin selepas log masuk

});

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

}

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

}

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>
<div class="code" style="position:relative; padding:0px; margin:0px;"><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;
        }
    }
};
Salin selepas log masuk

};

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!

sumber:php.cn
Artikel sebelumnya:Lima Perkara yang Saya Benci Tentang Reaksi (Dan Cara Mengatasinya) Artikel seterusnya:Bagaimanakah Saya Boleh Memanjangkan `Array.prototype.indexOf()` JavaScript untuk Keserasian Internet Explorer?
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
Isu terkini
Topik-topik yang berkaitan
Lagi>
Cadangan popular
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan