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
Libérer: 2024-12-05 07:08:09
original
511 Les gens l'ont consulté

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);
    });
}
Copier après la connexion

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();
}
Copier après la connexion

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;
            }
        }
    };
};
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal