ホームページ >ウェブフロントエンド >jsチュートリアル >「setTimeout」関数をPromiseに変える方法?

「setTimeout」関数をPromiseに変える方法?

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-25 01:42:18202ブラウズ

How to Turn a `setTimeout` Function into a Promise?

setTimeout を Promise に変える方法

setTimeout など、何も返さない関数の Promise を作成するタスク最初は難しいかもしれません。この概念を理解するために、変更されたコード サンプルを参照してください:

<br>関数async(callback){</p>
<pre class="brush:php;toolbar:false">setTimeout(function(){
    callback();
}, 5000);

}

async(function(){

console.log('async called back');

});

私たちの目標は、setTimeout コールバックが完了すると async が返すことができる Promise を生成することです。

Promise を使用した基本遅延

ネイティブ Promise を使用して、次のように後で呼び出される関数を作成できます。

 <br>後で機能する(遅延) {</p>
<pre class="brush:php;toolbar:false">return new Promise(function(resolve) {
    setTimeout(resolve, delay);
});

}

この関数はミリ秒単位の遅延をとり、遅延が経過した後に解決される Promise を返します。

< ;h3>基本遅延ありValue

後で変更して解決値を渡せるようにするには、setTimeout コールバックが引数として値を受け取るようにする必要があります。 setTimeout への追加の引数の提供をサポートするブラウザの場合、次のコードを使用できます:

<br>function Later(delay, value) {</p>
<pre class="brush:php;toolbar:false">return new Promise(function(resolve) {
    setTimeout(resolve, delay, value);
});

}

このコードは、値がコールバックに渡され、その後解決されることを保証します。

値を指定してキャンセル可能な遅延

タイムアウトをキャンセルする機能を提供したい場合は、キャンセルを含むオブジェクトを作成できます。 Promise のメソッドとアクセサー。 cancel メソッドが呼び出されると、タイムアウトがクリアされ、Promise が拒否されます。

<br>const Later = (遅延, 値) => {</p>
<pre class="brush:php;toolbar:false">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 を拒否する方法を提供します。

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

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。