Maison >interface Web >js tutoriel >Comment puis-je transformer « setTimeout » en promesse en JavaScript ?

Comment puis-je transformer « setTimeout » en promesse en JavaScript ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-05 07:08:09522parcourir

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

Transformer setTimeout en promesse

Présentation

Dans cet article, nous explorerons comment transformer setTimeout, une fonction qui exécute un rappel après un délai spécifié, dans une promesse qui peut être utilisée pour gérer des opérations asynchrones.

Natif Promises

JavaScript moderne prend en charge les promesses natives qui offrent un moyen pratique de représenter les opérations asynchrones. Pour convertir setTimeout en promesse, nous pouvons l'envelopper dans un constructeur de promesse et transmettre la fonction de résolution comme rappel :

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

Cette fonction renverra une promesse qui se résout après le délai spécifié.

Promesses personnalisées

Si vous préférez créer votre propre implémentation de promesse, vous pouvez définir un prototype de promesse et l'utiliser comme suit :

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

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

    return new promise();
}

Promesse annulable

Pour créer une promesse annulable, nous pouvons envelopper setTimeout dans un objet personnalisé qui fournit une méthode d'annulation :

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

Cet objet renvoie une promesse et une méthode d'annulation qui peuvent être utilisées pour terminer l'opération.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn