Heim >Web-Frontend >js-Tutorial >Wie kann ich „setTimeout' in JavaScript in ein Versprechen umwandeln?

Wie kann ich „setTimeout' in JavaScript in ein Versprechen umwandeln?

Barbara Streisand
Barbara StreisandOriginal
2024-12-05 07:08:09518Durchsuche

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

SetTimeout in ein Versprechen umwandeln

Übersicht

In diesem Artikel erfahren Sie, wie Sie setTimeout umwandeln, eine Funktion, die danach einen Rückruf ausführt eine bestimmte Verzögerung, in ein Versprechen, das zur Verarbeitung asynchroner Vorgänge verwendet werden kann.

Nativ Versprechen

Modernes JavaScript unterstützt native Versprechen, die eine bequeme Möglichkeit zur Darstellung asynchroner Vorgänge bieten. Um setTimeout in ein Promise umzuwandeln, können wir es in einen Promise-Konstruktor einschließen und die Auflösungsfunktion als Rückruf übergeben:

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

Diese Funktion gibt ein Promise zurück, das nach der angegebenen Verzögerung aufgelöst wird.

Maßgeschneiderte Versprechen

Wenn Sie lieber Ihre eigene Versprechen-Implementierung erstellen möchten, können Sie einen Versprechen-Prototyp definieren und ihn als verwenden folgt:

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

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

    return new promise();
}

Kündigbares Versprechen

Um ein stornierbares Versprechen zu erstellen, können wir setTimeout in ein benutzerdefiniertes Objekt einschließen, das eine Abbruchmethode bereitstellt:

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;
            }
        }
    };
};

Dieses Objekt gibt eine Promise- und eine Cancel-Methode zurück, die zum Beenden des Vorgangs verwendet werden kann.

Das obige ist der detaillierte Inhalt vonWie kann ich „setTimeout' in JavaScript in ein Versprechen umwandeln?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn