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

Не могу разобраться в синтаксисе ES2015. Как такое возможно?

Проблема:
Использую плагин для Vue.js - vue resource.
На их странице в гитхабе вполне понятный пример с функцией .then
Нашел статью, в которой используют такой синтаксис:
user: {
    authenticated: false
  },    
    
login(context, creds, redirect) {
    context.$http.post(LOGIN_URL, creds, (data) => {
       this.user.authenticated = true
    }).error ((err) => {
        context.error = err;
    });
  },


То есть вопреки документации, третьим параметром передают функцию. Причем эта функция корректно срабатывает при успешном запросе.
Или я совсем идиот, или в документации про эту функцию ничего не сказано (посмотрите сами)?
Я бы рад переписать это в нормальный вид с помощью .then, но в таком случае не работает this.user.

Собственно вопрос:
1. Как понять этот синтаксис? Я даже не знаю, как это загуглить..
2. Как заставить работать this.user вот здесь:
user: {
    authenticated: false
  },    
    
login(context, creds, redirect) {
    context.$http.post(LOGIN_URL, creds).then(function (response) {
        // this.user не работает
       this.user.authenticated = true
    },
    function (response) {
        context.error = err;
    });
  },

?

Буду премного благодарен, если кто-нибудь не поленится разобраться в этом и поможет мне :)

PS. все это конвертится в старый добрый js с помощью babel, однако суть от этого не меняется
  • Вопрос задан
  • 418 просмотров
Решения вопроса 1
AMar4enko
@AMar4enko
this.user из примера с callback работает потому что используется ES2015 arrow function, которая сохраняет контекст, в котором она была определена.
context.$http.post(LOGIN_URL, creds).then((response) =>{
       this.user.authenticated = true
    },
    function (response) {
        context.error = err;
    });

Это равнозначно
context.$http.post(LOGIN_URL, creds).then(function (response){
       this.user.authenticated = true
    }.bind(this),
    function (response) {
        context.error = err;
    });
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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