毎秒1回機能を実行したいが、機能自体は3秒かかる。setInterval nodejsの奇妙な振る舞い
var seconds = 3;
setInterval(
function(){
console.info(new Date().toString());
var waitTill = new Date(new Date().getTime() + seconds * 1000);
while(waitTill > new Date()){}
},1000
);
及び式Iに記載の各反復である:
Wed Jul 13 2016 09:49:07 GMT+0300 (IDT)
Wed Jul 13 2016 09:49:14 GMT+0300 (IDT)
Wed Jul 13 2016 09:49:21 GMT+0300 (IDT)
Wed Jul 13 2016 09:49:28 GMT+0300 (IDT)
結果は、各間隔が、私は次のサンプルコードを書いた<function execution time>*2+<setInterval delay>
の差に実行されることですドキュメントにはこの動作が記載されていません。私が考えた結果は、インターバル関数の実行にどれくらいの時間がかかっても、各反復は1秒後に実行されるということです。
何が起こっているのですか?
この問題に関する情報は非常に高く評価されます。
ありがとうございました!
更新
Nodejs 6.3.0を使用して
がブラウザ上でこのコードを試してみました...グーグルクロームは...ここ間隔はまだ奇妙である、3秒ごとに実行されます。あなたのコメントのすべてのための
更新
おかげで、はっきりしていない最後の事。 NodeJSでsetInterval()を1秒に設定し、関数の実行に3秒かかる場合、次の実行は4秒または3秒ではなく7秒です。それは私にとっては本当に奇妙な行動に見えます。それは容認できる行動ですか?
@Andreas:NodeJSはシングルスレッドです。 JavaScriptは*ではありません。 –