Angular “我应该关心吗?”;Zone.js不支持ES2017中的本机异步/等待。”;?
从Angular 9升级到10后,我在运行ng serve时收到以下警告:Angular “我应该关心吗?”;Zone.js不支持ES2017中的本机异步/等待。”;?,angular,zonejs,Angular,Zonejs,从Angular 9升级到10后,我在运行ng serve时收到以下警告: WARNING: Zone.js does not support native async/await in ES2017. These blocks are not intercepted by zone.js and will not triggering change detection. See: https://github.com/angular/zone.js/pull/1140 for more inf
WARNING: Zone.js does not support native async/await in ES2017.
These blocks are not intercepted by zone.js and will not triggering change detection.
See: https://github.com/angular/zone.js/pull/1140 for more information.
(node:56581) ExperimentalWarning: The fs.promises API is experimental
有人知道这意味着什么,如果这是我应该关心的事情吗?我同意。它可能不会更新您的组件,尤其是当您从某个API获取数据时。要解决这个问题,您可以将
tsconfig.base.json
文件中的目标更改回es2015
接受的答案是正确的,但更具体地说,如果您以es2015
为目标,您的异步
函数将被传输到使用名为\u waiter
的帮助函数,在引擎盖下使用了一个。由于上述链接中概述的技术限制,Zone.js可以挂接生成器函数并在其自己的微任务队列中管理其执行,但对于本机wait
语句则不可能这样做
最终的结果是,如果您的函数是在区域A的上下文中执行的,那么您会点击await
语句,当您的函数的下一行最终执行时,它将在根区域中。从这个问题:
const delay = ms => new Promise(resolve => setTimeout(resolve, ms));
const test = async () => {
console.log(Zone.current.name) // will output 'angular'
await delay(100);
console.log(Zone.current.name) // will output 'root'
}
我相信这也意味着,任何允许您管理任务执行的区域功能(如角度测试助手
fakeAsync
/tick
/flush
)将无法正确识别“任务”(等待等待解决)为挂起。(当然,这就是为什么这首先是一个问题。)这意味着,如果组件在异步方法中更新其值,可能会出现一个错误,但模板不会更新。如果您不太了解更改检测的工作原理,则应该注意此警告,但这将停止动态导入工作(如果使用),因为它仅在es2020中受支持