一个很重要的好处是,可以把这个事件侦听对象提供给代码中多个独立的部分;在 foo(…) 完成的时候,它们都可以独立地得到通知,以执行下一步:
var evt = foo( 42 );
// 让bar(..)侦听foo(..)的完成 bar( evt );
// 并且让baz(..)侦听foo(..)的完成 baz( evt );
对控制反转的恢复实现了更好的关注点分离,其中 bar(…) 和 baz(…) 不需要牵扯到 foo(…) 的调用细节。类似地,foo(…) 不需要知道或关注 bar(…) 和 baz(…) 是否存在, 或者是否在等待 foo(…) 的完成通知。
从本质上说,evt 对象就是分离的关注点之间一个中立的第三方协商机制。 Promise“事件”
你可能已经猜到,事件侦听对象 evt 就是 Promise 的一个模拟。
在基于 Promise 的方法中,前面的代码片段会让 foo(…) 创建并返回一个 Promise 实例,而 且这个 Promise 会被传递到 bar(…) 和 baz(…)。
我们侦听的 Promise 决议“事件”严格说来并不算是事件(尽管它们实现目 标的