Обновление стиля CSS во время выполнения Sub в VBS [дубликат]

Используйте функцию callback() внутри успеха foo(). Попробуйте таким образом. Это просто и легко понять. & nbsp;

var lat = "";
var lon = "";
function callback(data) {
    lat = data.lat;
    lon = data.lon;
}
function getLoc() {
    var url = "http://ip-api.com/json"
    $.getJSON(url, function(data) {
        callback(data);
    });
}

getLoc();
0
задан mgr326639 9 December 2014 в 13:38
поделиться

1 ответ

Скрипты и рендеринг выполняются в одном потоке. Это означает, что doThis будет завершен до начала рендеринга. Между тем, вы установили внутренний HTML в 'b', и это будет единственным результатом, который вы увидите.

Чтобы исправить это, вы должны завершить первый суб и вызвать intensiveOperation с короткой задержкой и сделать окончательное обновление HTML в конце второго юнита, например:

Sub doThis
    statusinfo.InnerHTML = "a"
    Call window.setTimeout(GetRef("intensiveOperation"), 4)
End Sub

Sub intensiveOperation()
    'takes long
    statusinfo.InnerHTML = "b"
End Sub

Завершение doThis освободит поток. Обратите внимание, что setTimeout не остановит выполнение, весь юг будет выполнен до конца. После этого браузер может отобразить страницу.

intensiveOperation вызывается в какой-то момент после завершения рендеринга, не раньше, чем данная задержка, но, возможно, намного позже, в зависимости от задач, которые CPU делает в это время .

Ответ на вопрос в заголовке вопроса в основном: никогда.

0
ответ дан Teemu 1 September 2018 в 01:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: