我注意到可以在 Angular 中创建同步或异步 EventEmitter。据我所知,默认是同步。
https://github.com/angular/angular/blob/master/packages/core/src/event_emitter.ts
据我所知,sync 意味着事件处理程序(generatorOrNext、error 和 complete)在与事件生成相同的变更检测周期中执行,而 async 意味着事件处理程序在另一个变更检测中执行循环(因为处理程序包含在触发更改检测的 setTimeout 方法中)。
当异步行为是一个优势(可能是一些与性能相关的用例)时,我想不出具体的用例?也许有人可以给我一个简短的具体用例?
我认为你是对的,因为当你在异步模式下调用 .emit() 时,它会:
1. Set up timeout inside event emitter (but nothing would be emitted).
2. Your current zone context turn ends, angular change detection happens.
3. Timeout's callback in event emitter triggers, which emits value and calls all subscribers of current event emitter.
4. And after all subscribers have been called, it runs change detection again.
Run Code Online (Sandbox Code Playgroud)
因此,不同之处在于,如果您使用同步事件发射器,则在调用 emit() 和执行订阅者之间不会进行更改检测,这在某些情况下可能很重要,例如,当您希望更新@Inputs时在调用事件发射器订阅者处理程序之前。希望这是有道理的。
| 归档时间: |
|
| 查看次数: |
158 次 |
| 最近记录: |