Риск асинхронного назначения переменной JavaScript - PullRequest
0 голосов
/ 15 декабря 2018

Существует много вопросов о переполнении стека, связанных с (а) синхронным выполнением и обещаниями, но я не совсем нашел ответ на этот вопрос.

Представьте, что у меня есть следующее:

var number = 0;
someAsyncFunctionWithCallback(function(){
    number++;
});
// ^ execute the above multiple times

Поскольку время выполнения каждого вызова функции варьируется, обратные вызовы будут вызываться в разное время.Поэтому мне интересно, как будет вести себя строка с приращением переменной.В Java я могу объявить переменные как synchronous, так что каждый прирост будет учитываться.С кодом, приведенным выше, каждый шаг числа гарантирован, или не обязательно?

Ответы [ 3 ]

0 голосов
/ 15 декабря 2018

JavaScript всегда синхронен с самим собой.Это не настоящая многопоточность, которую JS не поддерживает или не использует.

0 голосов
/ 15 декабря 2018

Каждый обратный вызов function(){ number++;} будет вызываться позже в недетерминированном порядке для увеличения number.Здесь можно быть уверенным только в одном: выполнение обратного вызова N увеличит в N раз переменную number

0 голосов
/ 15 декабря 2018

Пока вы можете быть уверены в том, когда и как часто будет запускаться someAsyncFunctionWithCallback, с этим методом проблем не возникнет.Вам нужно только знать, что проверка вашей переменной в любой заданной точке будет отражать только ее текущее значение в зависимости от того, сколько раз выполнялся обратный вызов.

...