0

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 относится к промису
        });
    },
}
n.osennij
  • 3,063

1 Answers1

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
        });
    },
  • 3
    а () => {}? :-( – arturovt Sep 28 '18 at 04:13
  • 1
    За var that = this; в наше время я бы по рукам линейкой бил ))) Есть же стрелочные функции. – yarkov_aleksei Sep 28 '18 at 06:56
  • эт, да, но если нет babel, то вполне норм... а хотя какого черта тут же async/await)) –  DemoGosha Sep 28 '18 at 07:40
  • @DemoGosha кстати реально непонятно зачем тут async/await, модно походу) axios.patch('/people/' + person.id, person).then(this.setPersonData); будет абсолютно аналогичен ;) – Artem Gorlachev Sep 28 '18 at 09:59