Firefox 12で奇妙な問題が発生しました。setTimeout()が常に適切な長さを待機しているとは限りません。それとも、ジャイブしないのは日付のミリ秒ですか?
このフィドルをチェックしてください。基本的に、100msのsetTimeoutは、80msから110msの間のどこでも実行されるようです。ジョン・レシグのタイマーの説明に基づいて、私はもっと理解することができます。しかし、少ないですか?
最初の実行で正しく機能することがあるため、問題を確認するには、1〜2回更新する必要がある場合があります。IEとChromeではうまく機能しているようです。
フィドルで使用しているコードは次のとおりです。
var txt = '',
TIMEOUT_LENGTH = 100,
_now;
now = Date.now || function() { return new Date().getTime() };
function log(time) {
c = time < 100? 'class="error"' : '';
$('#log').append('<p '+c+'>waited ' + time + '</p>');
}
function defer() {
var d = $.Deferred(),
start = now();
setTimeout(function() {
d.resolve(now() - start);
}, TIMEOUT_LENGTH);
return d.promise();
}
for (var i = 0; i < 20; i++) {
defer().then(log);
}
風変わりな出力のサンプルを次に示します。
これが私のブラウザ情報です:
そして、私の質問を読んでくれてありがとう!誰かがこれに光を当てることができることを願っています。
より詳しい情報
setInterval()を使用し、各増分をチェックして必要な時間が経過したかどうかを確認することで、問題を回避しました。このフィドルを参照してください。
しかし、誰かが問題の原因に光を当てることができるかどうかを聞くことにまだ非常に興味があります