@AlexandrMa

Как запустить методы объекта после работы инициализации?

Задача простая, запустить страницу, обратиться к файлу test.php который вернет массив JSON (задержка специально стоит 1 сек) и после этого выполнить все остальные методы объекта app . Проблема у меня снова с асинхронностью. Помогите её решить. То есть, после того, как мы получили массив чисел, надо начинать run().
let app = {

  items: [],

  init(){
    this.getData()
  },

  request(){
    return new Promise(function (resolve, reject) {
      let xhr = new XMLHttpRequest();
      xhr.open('POST', '/test.php');  //[1,2,3,4,5]
      xhr.onload = resolve;
      xhr.onerror = reject;
      xhr.send();
    });
  },

  getData(){
    this.request()
      .then(function(e){
        console.log(e.target.response); // тут выводится массив
        this.items = e.target.response;  //Uncaught (in promise) TypeError: this.createItems is not a function
        this.run();
      },function(e){
        console.log(e.target.response);
      });
  },

  run(){
    console.log('START');
    console.log(this.items);
  }

}

app.init();

Из-за чего выводится такая ошибка?
  • Вопрос задан
  • 39 просмотров
Решения вопроса 1
IonDen
@IonDen
JavaScript developer. IonDen.com
Проблема тут, у вас теряется контекст this
.then(function(e){

Чиним стрелочной функцией
.then((e) => {
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
bingo347
@bingo347 Куратор тега JavaScript
Crazy on performance...
Комментировать
Ваш ответ на вопрос

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

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