Как пробросить this во внешний контекст [дубликат]

289
12 февраля 2017, 13:06

На данный вопрос уже ответили:

  • Как вернуть значение из события или из функции обратного вызова? 2 ответа

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

 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?
    }
    }
Answer 1

Потому что 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)
    )
}
READ ALSO
Передать значение переменной JS в стиль CSS

Передать значение переменной JS в стиль CSS

Нужно передать диву ширину, значение которой вычисляется в JS

844
Линейный массив в иерархический JS [требует правки]

Линейный массив в иерархический JS [требует правки]

Добрый вечер, прошу помощи! Есть линейный массив:

306
Как на JS в mozilla API удалить файл?

Как на JS в mozilla API удалить файл?

Всем хорошего настроенияПишу макрос в мазиле, использую Imacros и столкнулся с такой проблемой

323
Select Option JS

Select Option JS

Пользователь выбирает из select какой-то option, каждый option имеет какое-то значение (Например: 10000), потом вводит в input число , и значение в option умножается...

284