我注意到可以在Angular中创建同步或异步EventEmitters。据我所知,默认值为同步。
https://github.com/angular/angular/blob/master/packages/core/src/event_emitter.ts
据我所知,同步是指事件处理程序(generatorOrNext,错误和完整)是在与事件生成相同的更改检测周期中执行的,而异步是指事件处理程序在事件生成时执行另一个变更检测周期(因为处理程序被包装在触发变更检测的setTimeout方法中)。
当异步行为成为优势时(可能是一些与性能相关的用例),我想不出具体的用例?也许有人可以给我一个简短的具体用例?
答案 0 :(得分:0)
我认为您是对的,因为当您以异步模式调用.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.
所以区别在于,如果您使用同步事件发射器,则您不会在调用emit()与正在执行的订阅者之间进行更改检测,这在某些情况下可能很重要,例如,您希望在调用事件发射器订阅者处理程序之前更新 @Inputs 。 希望这有道理。