Рассмотрим следующий код:
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) вызывается асинхронно (как только стек пуст). После вызова функции обработчика, если функция обработчика:
возвращает значение, обещание, возвращаемое затем, разрешается с возвращенным значением в качестве значения;