ホームページ > ウェブフロントエンド > jsチュートリアル > JavaScript で「setTimeout」を Promise に変えるにはどうすればよいですか?

JavaScript で「setTimeout」を Promise に変えるにはどうすればよいですか?

Barbara Streisand
リリース: 2024-12-05 07:08:09
オリジナル
510 人が閲覧しました

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

setTimeout を Promise に変える

概要

この記事では、setTimeout という、実行後にコールバックを実行する関数を変換する方法について説明します。指定された遅延を、非同期の処理に使用できる Promise に変換します。

ネイティブ Promises

最新の JavaScript は、非同期操作を表す便利な方法を提供するネイティブ Promises をサポートしています。 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();
}
ログイン後にコピー

キャンセル可能な Promise

キャンセル可能な 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 メソッドと cancel メソッドを返します。

以上がJavaScript で「setTimeout」を Promise に変えるにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート