Порядок звонков setTimeout - PullRequest
       1

Порядок звонков setTimeout

1 голос
/ 19 января 2012

Я использую setTimeout, чтобы визуализировать алгоритм обучения подкрепления, и мне любопытно его поведение.

Следующий код показывает setTimeout, используемый в while oop. Каждая итерация цикла должна использовать версию state, которая была изменена предыдущей итерацией. Есть ли вероятность того, что второй вызов setTimeout произойдет до первого, и значение состояния не будет корректно обновлено? Я спрашиваю отчасти потому, что, по-моему, я действительно заметил какое-то странное поведение, когда, когда период задержки слишком мал, журналы консоли вызовов doLearningInnerLoop не в порядке (т.е. время будет = 1 4 3 2 5 6 .. и т. Д.)

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;
}

1 Ответ

0 голосов
/ 22 января 2013

Мне кажется, я обнаружил, что подобная проблема вызовов setTimeout не происходит в ожидаемом порядке.

см .: Выполняются ли равные таймауты по порядку в Javascript?

Ответ выше заключается в том, что Firefox, кажется, делает это правильно (на основе источника), но у кого-то еще есть некоторые проблемы (возможно, они были в другом браузере).

...