Angular 异步EventEmitter的用例

Angular 异步EventEmitter的用例,angular,Angular,我注意到可以在Angular中创建同步或异步EventEmitter。在我看来,默认值是sync 据我所知,sync意味着事件处理程序(generatornext、error和complete)在与生成事件相同的更改检测周期中执行,而async意味着事件处理程序在另一个更改检测周期中执行(因为处理程序被包装在setTimeout方法中,该方法触发更改检测) 当异步行为成为一种优势时,我想不出具体的用例(可能是一些与性能相关的用例)?也许有人能给我一个简短的具体用例?我认为你是对的,因为当你在异

我注意到可以在Angular中创建同步或异步EventEmitter。在我看来,默认值是sync

据我所知,sync意味着事件处理程序(generatornext、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.
因此,不同之处在于,如果使用同步事件发射器,则调用emit()和正在执行的订阅服务器之间不会有更改检测,这在某些情况下可能很重要,例如,您希望在调用事件发射器订阅服务器处理程序之前更新@输入。 希望这有意义