@procode
Разработчик

Как в Axios (в Vue) вызвать пользовательскую функцию в случае успеха (см. код)?

Это простой код для примера, я пытаюсь сделать так:

<button @click="get">Get API...

...

methods: {
    lg() {
      console.log("Log 1");
    },
    lgt() {
      console.log("Log 2");
    },
    get() {
      this.axios
        .get("https://api.coindesk.com/v1/bpi/currentprice.json")
        .then(function(response) {
          console.log(response);
          this.lg();
        });
    },
  }


Но оно мне пишет:

Uncaught (in promise) TypeError: Cannot read property 'lg' of undefined at eval


Какие есть пути решения этой проблемы?

Мне нужно чтобы в случае успешного получения данных, запускались другие, определенные мной, функции (в примере: lg() и lgt()) - как это сделать?

То есть, данные через API оно получает, но мои функции - не видит, и, соответственно, не запускает.

Хотя например это:

methods: {
    lg() {
      console.log("Log 1");
      this.lgt();
    },
    lgt() {
      console.log("Log 2");
    },


работает как и положено: выводит в консоль "Log 1" и "Log 2" - а если в промисе - не видит...
  • Вопрос задан
  • 222 просмотра
Решения вопроса 3
no_one_safe
@no_one_safe
Вам нужно использовать стрелочные функции
get() {
      this.axios
        .get("https://api.coindesk.com/v1/bpi/currentprice.json")
        .then(response => {
          console.log(response);
          this.lg();
        });
    },
Ответ написан
firedragon
@firedragon
Не джун-мидл-сеньор, а трус-балбес-бывалый.
get() {
      const self = this;
      this.axios
        .get("https://api.coindesk.com/v1/bpi/currentprice.json")
        .then(function(response) {
          console.log(response);
          self.lg();
        });
    },
Ответ написан
@Kostik_1993
Web Developer
Это называется контекст выполнения функции. По умолчания в обычных функциях свой this, поэтому в нем нет вашего метода.вариантов два, писать объявляя контекст до функции, либо использовать стрелочные функции
.then((response) => {
          console.log(response);
          this.lg();
});
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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