>웹 프론트엔드 >JS 튜토리얼 >JavaScript에서 `setTimeout`을 약속으로 어떻게 바꿀 수 있나요?

JavaScript에서 `setTimeout`을 약속으로 어떻게 바꿀 수 있나요?

Barbara Streisand
Barbara Streisand원래의
2024-12-05 07:08:09513검색

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

setTimeout을 Promise로 전환

개요

이 글에서는 setTimeout을 변환한 후 콜백을 실행하는 함수인 setTimeout을 변환하는 방법을 살펴보겠습니다. 비동기 처리에 사용할 수 있는 약속으로 지정된 지연

네이티브 약속

최신 JavaScript는 비동기 작업을 나타내는 편리한 방법을 제공하는 기본 약속을 지원합니다. setTimeout을 Promise로 변환하려면 이를 Promise 생성자로 래핑하고 해결 함수를 콜백으로 전달할 수 있습니다.

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

이 함수는 지정된 지연 후에 해결되는 Promise를 반환합니다.

맞춤형 Promise

자신만의 Promise 구현을 만들고 싶다면 Promise 프로토타입을 정의하고 다음과 같이 사용할 수 있습니다. 다음은 다음과 같습니다.

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

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

    return new promise();
}

취소 가능한 약속

취소 가능한 약속을 생성하려면 취소 메서드를 제공하는 사용자 정의 개체에 setTimeout을 래핑할 수 있습니다.

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

이 개체 작업을 종료하는 데 사용할 수 있는 Promise 및 취소 메서드를 반환합니다.

위 내용은 JavaScript에서 `setTimeout`을 약속으로 어떻게 바꿀 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.