在阅读 Angular 指令的代码时路由器链路激活 https://github.com/angular/angular/blob/master/packages/router/src/directives/router_link_active.ts#L147,我发现了一个奇怪的用法Promise.resolve
:
private update(): void {
...
Promise.resolve().then(() => {
const hasActiveLinks = this.hasActiveLinks();
if (this.isActive !== hasActiveLinks) {
...
}
});
}
在什么情况下使用有用Promise.resolve().then()
而不是仅仅执行里面的代码then
?
我见过的用法setTimeout(() => defeferedFunction())
但第一次看到它Promise.resolve
.
Angular 框架经常这样做。它用于防止出现很多错误(抱歉不知道错误的实际措辞),例如“检查后值已更改”。如果更改检测器检查了一个值,然后在同一周期中更改了该值,则会发生此错误。
Promise.resolve() 将此代码推送到微任务队列,以便在 JavaScript 堆栈为空后执行它。这可以防止错误发生。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)