Rumah > hujung hadapan web > tutorial js > Bagaimanakah Saya Boleh Mengintegrasikan `setTimeout` dengan Janji untuk Operasi Asynchronous?

Bagaimanakah Saya Boleh Mengintegrasikan `setTimeout` dengan Janji untuk Operasi Asynchronous?

Patricia Arquette
Lepaskan: 2024-11-26 06:53:10
asal
1077 orang telah melayarinya

How Can I Integrate `setTimeout` with Promises for Asynchronous Operations?

Merapatkan setTimeout dengan Janji

Dalam dunia pengaturcaraan tak segerak, janji berkuasa tinggi sebagai satu cara untuk mengurus aliran peristiwa tak segerak . Walau bagaimanapun, menerima janji dalam setiap situasi boleh menjadi menakutkan, terutamanya apabila berurusan dengan fungsi seperti setTimeout yang sememangnya tidak mempunyai antara muka berasaskan janji yang wujud.

Untuk menyepadukan setTimeout dengan lancar ke alam kuasa janji, pertimbangkan pendekatan berikut:

Janji Asas: Mencipta Lengah

Katakan kita ingin meneroka asas mencipta janji daripada setTimeout. Pelaksanaan mudah boleh menyerupai ini:

function setTimeoutPromise(delay) {
    return new Promise((resolve) => {
        setTimeout(resolve, delay);
    });
}
Salin selepas log masuk

Di sini, kami memanfaatkan pembina Promise untuk memulakan janji yang merangkumi pelaksanaan tertunda setTimeout.

Meningkatkan dengan Nilai: Lulus a Resolusi Nilai

Meningkatkan janji kami untuk meluluskan nilai resolusi adalah sama mudah dalam persekitaran yang menyokong hujah tambahan untuk setTimeout. Begini cara kami mencapainya:

function setTimeoutValuePromise(delay, value) {
    return new Promise((resolve) => {
        setTimeout(resolve, delay, value); // Ensure that 'delay' comes before 'value' in argument order
    });
}
Salin selepas log masuk

Kebolehbatalan: Memperkenalkan Kawalan ke atas Janji

Janji sememangnya tidak berubah, tetapi kami boleh melanjutkan pelaksanaan kami untuk menyediakan lebih fleksibiliti dengan memperkenalkan kelewatan yang boleh dibatalkan. Dengan membalut janji dalam objek, kami memperoleh keupayaan untuk membatalkan tamat masa jika perlu.

function cancellableSetTimeout(delay, value) {
    let timer;
    let reject;
    const promise = new Promise((resolve, _reject) => {
        reject = _reject;
        timer = setTimeout(() => resolve(value), delay);
    });
    return {
        promise,
        cancel() {
            if (timer) {
                clearTimeout(timer);
                timer = null;
                reject();
                reject = null;
            }
        },
    };
}
Salin selepas log masuk

Pelaksanaan ini membolehkan pembatalan kelewatan, memberikan tahap kawalan yang tidak tersedia secara asal dengan janji sahaja.

Demonstrasi Langsung: Mempamerkan Janji-Diterapkan setTimeout

Untuk menyaksikan kuasa janji dalam tindakan, pertimbangkan contoh interaktif ini:

// Create a cancellable setTimeout
const cancellableTimeout = cancellableSetTimeout(100, "Message from timeout");

// Handle the promise resolution
cancellableTimeout.promise
    .then((result) => console.log(result)) // Log the resolved value
    .catch(() => console.log("Timeout cancelled")); // Log if the timeout was cancelled

// Simulate cancellation
setTimeout(() => {
    cancellableTimeout.cancel(); // Cancel the timeout after a brief delay
}, 50);
Salin selepas log masuk

Demonstrasi ini mempamerkan pendekatan berasaskan janji, menonjolkan kedua-dua nilai penyelesaian dan fungsi pembatalan.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengintegrasikan `setTimeout` dengan Janji untuk Operasi Asynchronous?. 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