@gauthier

Как записать данные в переменную после выполнения axios?

Добрый день! Пишу такой класс:

class Address {
   address = null;
   data = [];
  
   data() {
     return this.data;
   }
   
   constructor(address) {
     this.address = address;
     
     const fetchInformation = () => {
        return axios.get(`${API_BASE}/getAddressInformation`, {
           params: {
             address: this.address
           }
       }).then(({ data }) => this.data = data);
     }
     
     fetchInformation();
   }
}

const address = new Address(TEST_WALLET);
console.log(address);


Столкнулся с проблемой, что data остаётся как и была. Как можно было бы сделать, чтоб в переменную записывались данные после выполнения axios?
  • Вопрос задан
  • 524 просмотра
Пригласить эксперта
Ответы на вопрос 1
sergiks
@sergiks Куратор тега JavaScript
♬♬
Опять кто-то не понял асинхронности.

axios.get() возвращает Promise. Его метод .then() выполнится не сразу, а когда-то потом, когда будет получен результат запроса. Представьте, что интернет очччеенньь мееедленнныыыйй.

Зато остальной код выполняется привычно сразу («синхронно»). В т.ч. и console.log() в последней строке – сразу же за созданием объекта. Но на тот момент веб-запрос ещё не выполнился.

TL&DR надо ждать. Это можно делать несколькими способами: коллбэком, промисами, обёрткой вокруг них async/await.
Например
class Address {
  address = null;
  data = [];
 
  data() {
    return this.data;
  }
  
  constructor(address) {
    this.address = address;
  }    

  fetchInformation() {
    return axios.get(`${API_BASE}/getAddressInformation`, {
      params: {
        address: this.address
      }
    }).then(({ data }) => this.data = data);
  }
}

async function initialize() {
  const address = new Address(TEST_WALLET);
  await address.fetchInformation();
  console.log(address);
}

initialize();
Ответ написан
Ваш ответ на вопрос

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

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