1

Вопрос находиться в комментариях к коду.

 export default class Abstract {
     construct(field = 'defaultField') {
      this.field = field;
    }

    method() {

     const promise = new Promise((resolve, reject) => {
      resolve('newField');
     });

     promise.then(
      (newField) => { this.field = newField; }
     );
     console.log(this.field); // defaultField - Почему? И как изменить this.field на newField?

// Получается я устанавливаю поле this.field для функции then?
    }
    }
  • потому что вывод в консоль синхронно вызывается. То бишь, рановато. – vp_arth Feb 10 '17 at 19:42

1 Answers1

2

Потому что console.log — синхронная функция, а Promise — асинхронный. Вот и получается, что console.log показывает тебе this.field раньше, чем он успевает изменить своё значение

Пробуй так проверить сам:

// ...

method() {
    const promise = new Promise((resolve, reject) => {
        resolve('newField');
    })

    promise.then(newField => {
        this.field = newField

        console.log(this.field)
    )
}
  • этот код сам по себе не развеивает сомнений автора, что this.field внутри then указывает куда-то не туда. Простой setTimeout - куда надёжнее. – vp_arth Feb 10 '17 at 20:05
  • Ок! Я просто до конца не понимал механизм работы помисов. Теперь вроде все понятно. Спасибо! – Andrii Vasilenko Feb 11 '17 at 06:03