有没有办法从一个EventEmitter
(或 Angular 2 alpha 46 / RxJS 5 alpha 中可用的等效项)? IE。如果我们在值解析后订阅,它将使用之前解析的值触发。类似于我们总是返回相同的承诺。
理想情况下,仅使用 Angular 2 对象(我在某处读到稍后将嵌入一个轻量级 RxJS 以消除依赖关系),否则导入 RxJS 就可以了。 AsyncSubject 似乎符合我的需求,但它在 RxJS 5 alpha 中不可用。
我尝试了以下操作,但没有成功(从未触发)。关于如何使用它有什么想法吗?
let emitter = new EventEmitter<MyObj>();
setTimeout(() => {emitter.next(new MyObj());});
this.observable = emitter;
return this.observable.share();
这里完全是冷热比较 http://plnkr.co/edit/zVte4KFHX4f6Cp97lbtu?p=preview
Usecase:某些异步对象仅到达一次(例如,一系列 HTTP 调用合并/包装在一个new EventEmitter
),但将已解析的异步对象提供给订阅它的任何服务/组件,即使它们是在解析后订阅的(收到 HTTP 响应)。
编辑:问题不在于如何合并 HTTP 响应,而是如何从 EventEmitter 或 Angular 2 alpha 46 / RxJS 5 alpha 中可用的任何等效项获取(热门?)可观察值,允许在检索/解析异步结果后进行订阅(HTTP 只是异步源的一个示例)。myEventEmitter.share() 不起作用(参见上面的 plunker),尽管它与 HTTP 返回的 Observable 一起工作(参见笨蛋来自 http://plnkr.co/edit/GFdXPncYPxx0IcqIwQnO?p=preview@埃里克·马丁内斯)。从 Angular 2 alpha 46 开始,.toRx() 方法不再存在,EventEmitter 是可观察对象和主题本身。
只要我们始终返回相同的 Promise 对象,这对于 Promise 来说就很有效。由于我们在 HTTP Angular 2 服务中引入了观察者,所以我想避免混合 Promise 和观察者(据说观察者比 Promise 更强大,所以它应该允许使用 Promise 做一些简单的事情)。
有关 share() 的规范 https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/operators/share.md(我还没有找到版本 5 alpha 的文档 - Angular 2 使用的版本) - 正在研究Observable
由 Angular 2 HTTP 服务返回,不适用于 EventEmitter。
编辑:澄清了为什么不使用 HTTP 返回的 Observable 并补充说不直接使用 RxJS 会更好。
编辑:更改了描述:关注的是多个订阅,而不是合并 HTTP 结果。
Thanks!