次のコードはProject Silk(マイクロソフトのサンプルアプリケーション)から取得したものです 以下のpublishメソッドは、イベントcallBacksの配列をループし、それぞれを実行します。 forループを使用する代わりに、代わりにsetIntervalが使用されます。setIntervalを使用して関数を非同期で呼び出すことはできますか?
これにより、前回のコールバックが完了する前に、各加入者コールバックを呼び出すことができるようになりました。これは正しいです?私は、インターバル内の関数の実行が、その前のすべての実行が終了するまで、ブラウザが実行することを許可しないと考えました。
これはforループを実行することとはまったく異なりますか?
that.publish = function (eventName, data)
{
var context, intervalId, idx = 0;
if (queue[eventName])
{
intervalId = setInterval(function()
{
if (queue[eventName][idx])
{
context = queue[eventName][idx].context || this;
queue[eventName][idx].callback.call(context, data);
idx += 1;
}
else { clearInterval(intervalId); }
}, 0);
}
http://ejohn.org/blog/how-javascript-timers-work/は、あなたがこのような何かを探しています:https://github.com/caolan/async#parallel –
このコードはドキュメントはそれがないと主張するものない場合、私は理解に興味があります。なぜなら、何かがあるなら、 'setInterval'が動作する方法について私は理解していないからです。私はそれを理解していない、特にJSはシングルスレッドなので。 –
'setInterval(...、0)'コールバックは、ブラウザが再び制御権を持つまでは起動されないので、 'setInterval'コールは「ブラウザが終了したらこの関数を呼び出す」と言っています。 –