![](/img/trans.png)
[英]Nested setTimeout() calls don't run in the correct order in javascript?
[英]Order of setTimeout calls
我正在使用setTimeout
可視化強化學習算法,並對它的行為感到好奇。
以下代碼顯示了在while oop中使用的setTimeout。 循環的每個迭代都應使用state
的版本,該版本已由上一迭代修改。 setTimeout的第二次調用是否有可能在第一次調用之前發生,並且state的值將無法正確更新? 我之所以問一部分,是因為我認為我實際上已經注意到了一些奇怪的行為,即當延遲時間太短時,doLearningInnerLoop調用的控制台日志是亂序的(即時間= 1 4 3 2 5 6 ..etc)。
var doLearningInnerLoop = function(time, observedData, stateHolder, domain, sampleAction, selectModel, numSamples, depth, discount, stateQueries) {
console.log("new Round, time = " + time);
var state = stateHolder.state;
var currentModel = selectModel(observedData, 10, stateQueries);
var bestAction = sparseSampleMcmc(depth, numSamples, discount, currentModel, state, sampleAction, stateQueries);
var newStateReward = domain.executeAction(bestAction, stateQueries);
observedData.push(bestAction, newStateReward[1], newStateReward[0]);
stateHolder.state = newStateReward[0];
}
var doLearningLoops = function(time, observedData, state, domain, sampleAction, selectModel, numSamples, depth, discount, stateQueries) {
stateHolder = {};
stateHolder.state = state;
while(stateQueries['canContinue']['codeAsFunction'](time, stateHolder.state) === true) {
setTimeout(doLearningInnerLoop, 1000, time, observedData, stateHolder, domain, sampleAction, selectModel, numSamples, depth, discount, stateQueries);
time += 1;
}
return state;
}
我相信我發現了setTimeout調用未按預期順序發生的類似問題。
請參閱: 是否按順序執行了相等的Java超時?
上面的答案是Firefox似乎可以正確地做到這一點(基於消息來源),但是其他人也對此提出了一些質疑(也許他們使用的是其他瀏覽器)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.