Как я могу обновить объект окна в Firefox Developer Tools? - PullRequest
0 голосов
/ 24 июня 2019

Я хочу использовать Chrome или Firefox Developer Tools для выполнения кода на веб-сайте.Когда я выполняю переменную «window.RR» в одиночку, она показывает мне правильное значение (это мера серверного времени сайта (в миллисекундах), и каждый раз, когда я выполняю, это дает мне другое значение).Когда я использую его в цикле (переменная c), тогда переменная является константой во всех циклах и равна значению первого цикла.

Мой код:

var i;
b=window.RR;
for (i=0 ; i<400000 ; i++) {
    c=window.RR;
    if (c!==b) {
        alert(c)
    }
}

Я ожидаю получить правильное значение, когда использую его в цикле, как мне этого добиться?

1 Ответ

0 голосов
/ 24 июня 2019

Я предполагаю, что переменная window.RR обновляется с интервалом.Это означает, что переменная обновляется асинхронно.

Например, допустим, что window.RR содержит временную метку (в миллисекундах) сервера, а код ниже обновляет window.RR каждую миллисекунду.

setInterval(function () {
    window.RR += 1;
}, 1);

Если вы затем запустите цикл, выполнение которого может занять более 1 мс

var c = window.RR;
for (var i = 0; i < 999999999999999; i++){
    if (c != window.RR) { // This is always false
        console.log('This will never be printed');
    }
}

window.RR не изменится во время выполнения цикла, потому что javascript асинхронныйкоды не работают параллельно.

Таким образом, если выполнение цикла занимает более 1 мсек window.RR обновление кода произойдет после завершения цикла (ему придется ждать, пока любой другой код, запущенный до завершения, не завершится).этот код может быть выполнен).


Дополнительная информация:

Этот код не позволяет выполнять какой-либо другой код во время выполнения цикла for.

var c = window.RR;
for (var i = 0; i < 999999999999999; i++){
    if (c != window.RR) { // This is always false
        console.log('This will never be printed');
    }
}

Чтобы разрешить другой кодчтобы запустить, вы должны сделать каждый цикл асинхронным.

var c = window.RR;
var loop = function(i) {
    if (i < 999999999999999) {
        i++;
        if (c != window.RR) {
            console.log('This will be printed!');
        }
        else {
            // Allow other javascript codes to run
            // So that the window.RR can be updated
            setTimeout(function () {loop(i);}, 0);
        }
    }
};
loop(0);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...