我们已经看到了如何进入和退出 zones,现在让我们看看我们如何跟踪跨异步操作的 zones 。
1 | let rootZone = Zone.current; |
1 | rootLocation: |
关键点:
类似示例使用promises。(Promises有点不同,因为它们在回调中处理自己的异常)
1 | let rootZone = Zone.current; |
关键点:
对于Promise,在.then()
调用生效时 thenCallback 会在 zone 中被调用 。
或者,我们可以为thenCallback使用不同的 zone ,例如Promise创建 zone 或Promise解析 zone 。 这两者都不是一个好的匹配,因为一个Promise可以在一个第三方库中创建和解析,它可以有自己的 zone 。 然后将所得到的承诺传递到在其自己的 zone 中运行的应用程序中。 如果应用程序在其自己的 zone 中注册.then()
,那么它将期望它自己的 zone 传播。
示例:调用fetch()
返回一个promise。 内部fetch()
可能使用自己的 zone 为自己的原因。 调用.then()的应用程序将期望应用程序 zone 。 (我们不希望fetch()
zone 泄漏到我们的应用程序中。)