async EventEmitters的正确用法是什么?

时间:2017-11-13 10:41:05

标签: angular

我注意到可以将EventEmitter配置为异步发出事件。

  

constructor(isAsync: boolean = false)
  创建一个EventEmitter实例,它依赖于isAsync,以同步或异步方式传递事件。

(摘自https://angular.io/api/core/EventEmitter

我的组件什么时候应该异步传递事件而不是使用默认行为?

1 个答案:

答案 0 :(得分:2)

当您使用isAsync选项时,EventEmitter发出的每个事件都会被setTimeout包裹,使其异步。

摘自EventEmitter源代码:

this.__isAsync ? 
  (value: any) => { setTimeout(() => generatorOrNext.next(value)); } :
  (value: any) => { generatorOrNext.next(value); };

它增加了什么价值?可能没有。 区域检查将在您的代码收到事件之前进行,然后在您的事件处理完成后再次为CPU创建更多工作。从理论上讲,你可以在两者之间挤压一些自定义的东西,但即使是有角度的团队也不推荐它。

在此处详细了解推理:https://github.com/angular/angular/issues/6311

希望有所帮助