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

Patricia Arquette
リリース: 2024-11-25 01:42:18
オリジナル
126 人が閲覧しました

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

setTimeout を Promise に変える方法

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

<br>関数async(callback){</p>
<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">setTimeout(function(){
    callback();
}, 5000);
ログイン後にコピー

}

async(function(){

console.log('async called back');
ログイン後にコピー

});

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

Promise を使用した基本遅延

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

 <br>後で機能する(遅延) {</p>
<div class="code" style="position:relative; padding:0px; margin:0px;"><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>
<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">return new Promise(function(resolve) {
    setTimeout(resolve, delay, value);
});
ログイン後にコピー

}

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

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

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

<br>const Later = (遅延, 値) => {</p>
<div class="code" style="position:relative; padding:0px; margin:0px;"><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 サイトの他の関連記事を参照してください。

ソース:php.cn
前の記事:React について私が嫌いな 5 つのこと (そしてそれらを克服する方法) 次の記事:Internet Explorer との互換性を保つために JavaScript の「Array.prototype.indexOf()」を拡張するにはどうすればよいですか?
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
最新の問題
関連トピック
詳細>
人気のおすすめ
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート