Вызвать метод из промиса [дубликат]

135
16 января 2019, 23:30

На данный вопрос уже ответили:

  • Потеря контекста вызова 5 ответов

Vuejs 2. В компоненте есть метод updatePerson(), который использует async axios. И внутри мне нужно вызвать другой метод setPersonData(). Как можно это сделать?

methods: {
    setPersonData(data) {
        this.clearAll();
        this.setPerson(data);
    },
    updatePerson(person) {
        this.$awn.confirm('Update?', async function () {
            let response = await axios.patch('/people/' + person.id, person);
            this.setPersonData(response); //Не работает, т.к. this относится к промису
        });
    },
}
Answer 1

нужно объявить переменную ссылающуюся на данный объект

methods: {
    setPersonData(data) {
        this.clearAll();
        this.setPerson(data);
    },
    updatePerson(person) {
        var that = this; // запоминаем объект
        this.$awn.confirm('Update?', async function () {
            let response = await axios.patch('/people/' + person.id, person);
            that.setPersonData(response); // ссылаемся на объект Vue
        });
    },
}

как правильно в комментах написали - можно воспользоваться стрелочными функциями

    updatePerson(person) {
        this.$awn.confirm('Update?', async () => {
            let response = await axios.patch('/people/' + person.id, person);
            this.setPersonData(response); // ссылаемся на объект Vue
        });
    },
READ ALSO
Фильтр записей в таблице

Фильтр записей в таблице

На странице есть что-то типо таблицы, куда попадают записи из БД с помощью аякс запроса при загрузке этой самой страницыТакже есть кнопки,...

211
Не работает else If в JavaScript. [закрыт]

Не работает else If в JavaScript. [закрыт]

Когда ввожу 1 и 4 все нормально 1 < 4, но когда 4 и 1 то показывает 4 = 4 пробовал все и ничего не получилосьПомогите!!! Спасибо

158
Таймер окружность до следующего слайда slick slider

Таймер окружность до следующего слайда slick slider

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

177