Все ли обещания созданы равными? - PullRequest
0 голосов
/ 29 октября 2018

Рассмотрим следующий код:

var someFunc = function() {
  return new Promise((resolve, reject) => {
      setTimeout(() => {
          resolve(37);
      }, 1000);
  });
};

var f1 = function() {
  return someFunc()
    .then(val => {
      return val + 1;
    });  
}

var f2 = function() {
  return new Promise(resolve => {
    someFunc()
    .then(val => {
      resolve(val + 1);
    });    
  });
}

var f3 = function() {
  someFunc().then(val => {
      return new Promise(resolve => {
          resolve(val + 1);
      });    
  });              
};

Angular 6 обнаружение изменений не срабатывает, если значение связанной переменной обновляется в then из f1.

Итак, если следующий обработчик кликов:

Это не работает: (пользовательский интерфейс не обновляется)

public myClickHandler() {
   f1().then(val => this.uiBoundVar = val);
}

Это работает: (UI обновляется)

public myClickHandler() {
   f2().then(val => this.uiBoundVar = val);
   // This works too
   // f3().then(val => this.uiBoundVar = val);
}

Не уверен, что это из-за: Из MDN Promise возвращаемое значение

Обещание в состоянии ожидания. Затем функция-обработчик (onFulfilled или onRejected) вызывается асинхронно (как только стек пуст). После вызова функции обработчика, если функция обработчика:

возвращает значение, обещание, возвращаемое затем, разрешается с возвращенным значением в качестве значения;

...