Асинхронизация / синхронизация: как я могу быть уверен, что функция Javascript будет выполняться после цикла for? - PullRequest
0 голосов
/ 22 января 2019

Например, у меня есть этот код:

var smth = '';
for (var i = 0; i < 10; i++) {
    // Some long function I call from elsewhere
    for (var k = 0; k < 10000; k++) {
       smth += k + ' '; 
    }
    smth += i;
}
console.log(smth);

Могу ли я быть уверен, что console.log всегда будет выполняться после того, как циклы for завершат обработку моего параметра smth?

А как насчет всех асинхронных / синхронизирующих выполнений? Как бы я переписал код так, чтобы console.log выполнялся одновременно с циклом for?

Ответы [ 3 ]

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

for loop являются блокирующими задачами, поэтому в этом случае ваш console.log() всегда будет выполняться ПОСЛЕ цикла for.

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

Могу ли я быть уверен, что console.log всегда будет выполняться после того, как циклы for закончат обработку моего параметра smth?

Да.Там нет ничего асинхронного.

А как насчет всех асинхронных / синхронизирующих выполнений?

У вас там нет асинхронного кода.

Как бы я переписалкод, чтобы console.log выполнялся одновременно с циклом for?

Вам нужно сделать код неблокирующим.В ядре JavaScript нет ничего для этого.В некоторых средах хостов предусмотрена форма потоков с помощью рабочих.

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

Javascript выполняет код синхронно, то есть по одной строке за раз. Это означает, что оператор console.log будет выполнен после того, как циклы for завершат свое выполнение.

...