2017-09-02 12 views
1

別のクラスのsetTimeout()の機能で別のタイマーを作成します。すべてのタイムアウトを一緒にする方法があるかどうかを知りたいですか?どのように私はJavaScriptですべてのタイマーを得ることができますか?

+0

これはできません。 'setTimeout()'と 'setInterval()'関数は値を返しますが、あなた自身のコードでそれらを追跡しなければなりません。 – Pointy

+0

setTimeOut()の静的実装の使用はどうですか? これはすべてのクラスから呼び出すことができ、呼び出しも追跡できます。 – user1615664

+0

あなたは共通の配列のどこかに戻りIDを格納する必要があります – Yogesh

答えて

1

デフォルトでは、この値は設定されていません。タイマーの追跡を可能にする独自のモジュールを作成することができます。 は大雑把

// ES2015+ version 
const activeTimers = []; 
exports.setTimeout = (callback, interval, ...timerArgs) => { 
    const handle = setTimeout((...args) => { 
     const index = activeTimers.indexOf(handle); 
     if (index >= 0) { 
      activeTimers.splice(index, 1); 
     } 
     callback(...args); 
    }, interval, ...timerArgs); 
    activeTimers.push(handle); 
}; 
exports.getActiveTimers =() => { 
    return activeTimers.slice(); 
}; 

...そのsetTimeout代わりにグローバルなものを使用します。

0

登録されたタイムアウトを取得するAPIはありませんが、目標を達成するための「方法」があります。

新しい関数を作成し、registerTimeoutとしましょう。それがsetTimeoutと同じ署名を持っていることを確認してください。この関数では、setTimeoutを使用して、レジスタが必要なもの(返されたタイマーID、コールバック関数、タイムアウト期間...)を記録します。

これで、登録されたタイムアウトについて独自のデータ構造を照会できます。

もちろん、有効期限切れ/トリガータイムアウトとタイムアウトをクリアしておく必要があります。

関連する問題