私はいくつかの機能を実行する必要がありますが、タイムアウトが切れた場合はこの機能を中止する必要があります。私はsetTimeoutとsetImmediateを使ってみました。私はこの例を書いて、作業の確認のためのコールバックでのsetIntervalを使用するが、それは私を助けてdid't:JavaScriptのタイムアウトで機能を中止する方法
function waiter(timeout, fun) {
var functionHandler = setImmediate(fun);
var timeoutHandler = setTimeout(() => {
console.log('stoped');
clearImmediate(functionHandler);
clearTimeout(timeoutHandler);
}, timeout);
fun();
}
waiter(5000,() => {
setInterval(() => {
console.log('work');
}, 500);
});
をclearImmediateした後、私の間隔がまだ働いてclearTimeout。どのように私はそのメソッドが私の機能が中止されることを保証していないことを理解した。 誰かがどのようにして機能の実行を中止するか考えていますか?
更新: はい、私はclearIntervalを呼び出す必要があることを知っていますが、これは作業確認のための単なる例です。たとえば、私はいくつかの大きなデータを解析する必要があり、それがタイムアウトで実行できない場合は、この関数の実行を取り消して別のものを呼び出す必要があります。
インターバルタイマを停止するには、 'clearInterval'を呼び出す必要があります。 – Teemu
コメントの質問が正しく理解されていれば、答えは「いいえ」です。タイマーの呼び出しは実行をブロックせず、終了条件が満たされるまで時間ループ機能が実行される(無限ループ、時間制限された機能が決して実行されない場合)まで、「while」ループは継続する。 – Teemu
更新を見た後:長いポーリング機能を使用している場合は、タイムアウト機能を実行する前に最後まで実行されます。それで、不可能です。長いポーリング作業にWebワーカーを使用することを検討してください。 – Teemu