考虑以下代码:
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);
});
});
};
如果在f1的Angular 6
中更新了绑定变量的值, then
更改检测将无法启动。
因此,如果以下是点击处理程序:
这不起作用:(UI无法更新)
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);
}
不确定是否是由于From MDN Promise return value
处于待处理状态的承诺。然后,异步调用处理程序函数(onFulfilled或onRejected)(一旦堆栈为空)。调用处理程序函数后,如果处理程序函数为:
返回一个值,然后返回的promise将返回的值作为其值进行解析;