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 を使用して、次のように後で呼び出される関数を作成できます。
<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 サイトの他の関連記事を参照してください。