Rumah >hujung hadapan web >tutorial js >Bagaimanakah Saya Boleh Mengubah `setTimeout` menjadi Janji dalam JavaScript?

Bagaimanakah Saya Boleh Mengubah `setTimeout` menjadi Janji dalam JavaScript?

Barbara Streisand
Barbara Streisandasal
2024-12-05 07:08:09519semak imbas

How Can I Turn `setTimeout` into a Promise in JavaScript?

Menukar setTimeout menjadi Janji

Ikhtisar

Dalam artikel ini, kita akan meneroka cara mengubah setTimeout, fungsi yang melaksanakan panggilan balik selepas kelewatan yang ditentukan, menjadi Janji yang boleh digunakan untuk mengendalikan tak segerak operasi.

Janji Asli

JavaScript moden menyokong Janji asli yang menyediakan cara mudah untuk mewakili operasi tak segerak. Untuk menukar setTimeout kepada Promise, kita boleh membungkusnya dalam pembina Promise dan lulus fungsi resolve sebagai panggilan balik:

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

Fungsi ini akan mengembalikan Promise yang diselesaikan selepas kelewatan yang ditentukan.

Janji Tersuai

Jika anda lebih suka mencipta pelaksanaan Janji anda sendiri, anda boleh menentukan janji prototaip dan gunakannya seperti berikut:

function setTimeoutReturnPromise() {
    function promise() { }
    
    promise.prototype.then = function() {
        console.log('timed out');
    };

    setTimeout(() => {
        return this;  // Return the promise object
    }, 2000);

    return new promise();
}

Janji Boleh Dibatalkan

Untuk mencipta Janji yang boleh dibatalkan, kita boleh membalut setTimeout dalam objek tersuai yang menyediakan kaedah batal:

const later = (delay, value) => {
    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;
            }
        }
    };
};

Objek ini mengembalikan Janji dan kaedah pembatalan yang boleh digunakan untuk menamatkan operasi.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengubah `setTimeout` menjadi Janji dalam JavaScript?. 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