簡體   English   中英

setTimeout調用的順序

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM