gpt4 book ai didi

javascript - 区域检测所有任务何时完成

转载 作者:太空狗 更新时间:2023-10-29 19:31:16 24 4
gpt4 key购买 nike

我正在尝试使用 Angular 2 中的区域来检测一组任务何时完成。我有以下代码使用 angular2.0.0 beta 14

var count = 0;
Zone.fork({
'+beforeTask': () => { if (count === 0) console.log('before'); },
'+afterTask': () => { if (--count === 0) console.log('after'); },
'+onZoneCreated': () => { console.log(++count); }
}).run(() => {
this.http.get('/index.html').subscribe(response => {
console.log('allo');

setTimeout(() => console.log(response.text()), 1000);
});
});

据我了解,每个 fork 都会在创建任务和区域之后触发一个之前的任务。使用此代码,它将记录以下内容:

before
1
2
allo
after
1
<html><body>Hello world</body></html>
after

出于某种原因,setTimeout 的区域是在调用 englobing 任务的“afterTask”之后创建的。最后一次计数在 1000 毫秒的等待时间后打印。

我如何检测一切何时完成?

最佳答案

setTimeout 任务实际上是在同一个zone 下执行的,并且共享与初始fork 相同的执行上下文。在 setTimeout 排队的任务完成之前触发初始 fork 的 afterTask 事件 Hook 的原因是由于 setTimeout 的语义。如果您需要有关 Javascript 异步语义的一些详细信息,可以在 MDN 上找到一篇不错的文章.

对于区域,唯一可以延迟执行的实例是通过异步任务,这些可以使用 enqueueTaskdequeueTask Prop 进行观察。如果没有事件,您可以将这些 Hook 与计划任务计数器结合使用以确定区域中的所有任务何时完成。 Plnkr example

关于javascript - 区域检测所有任务何时完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36576713/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com