@ber_enot
Веб-разработчик, Vue.js / Node.js

Как изменить внешнюю переменную в стрелочной функции?

Пытаюсь понять новый стандарт ES2015. Не могу изменить переменную res:
var res = false;
    context.$http.post('http://localhost/auth', {token: tokenValue}).then((response) => {
            this.res = true; 
            res = true;
        },
        (response) => {           
            this.res = true;
            res = true;
    })
    console.log(res);

выводит false.
  • Вопрос задан
  • 180 просмотров
Решения вопроса 3
AMar4enko
@AMar4enko
Вам надо сначала в целом JS понять - ваша проблема не про ES2015, а про асинхронность
Ответ написан
Stalker_RED
@Stalker_RED
var res = false;
    context.$http.post('http://localhost/auth', {token: tokenValue}).then((response) => {
            this.res = true; 
            res = true;
            console.log(res, 'bingo!')
        },
        (response) => {           
            this.res = true;
            res = true;
    })
    console.log(res);
    setTimeout(function(){
       console.log(res, 'bingo again!');
    }, 3000) // надеюсь, три секунды хватит

Выводит
false
true bingo!
true bingo again!


Потому что POST-запрос происходит асинхронно, и на момент срабатывания вашего console.log он еще не выполнился.
Ответ написан
Комментировать
@GeraldIstar
Frontend
Как написал Александр Марченко - проблема не в ES2015.
У вас console.log(res) выполняется раньше. И только лишь после ответа от сервера - уже остальные коллбеки. Так будет вне зависимости от скорости ответа от сервера, потому, что все отложенные во времени задачи, выполняются как минимум после завершения текущей функции, если не вдаваться в подробности. Подробнее про планирование задач и микрозадач в js можно глянуть здесь:
https://habrahabr.ru/post/264993/
Но сначала лучше с js в целом разобраться.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы