当前位置:  开发笔记 > 前端 > 正文

将Angular2 Http响应转换为ConnectableObservable

如何解决《将Angular2Http响应转换为ConnectableObservable》经验,为你挑选了1个好方法。

我必须承认我正在使用Angular2做我的第一步,我在这里遇到了一个问题,我有一些问题需要理解.我使用的是angular2@2.0.0-beta.0,它依赖于rxjs@5.0.0-beta.0.

我的目的是发出HTTP请求(到REST服务)并允许将响应发送给返回的observable的多个订阅者.如果我正确理解文档,我可以使用publish()函数将例如http.post函数返回的Observable转换为ConnectableObservable,通过多次调用ConnectableObservable.subcribe(...)来注册多个subsriber,然后调用ConnectableObservable .connect()实际执行HTTP请求,例如:

var obs: Observable = this.http.post(...);
var cobs: ConnectableObservable = obs.publish();
cobs.subscribe(sub1);
cobs.subscribe(sub2);
cobs.connect();

至少我的IDE接缝同意这一点,并没有显示任何警告.运行代码,但我得到以下错误:

EXCEPTION:评估"click"时出错
ORIGINAL EXCEPTION:TypeError:obs.publish不是函数

如果我obs在调试器中检查对象,则实际上只有一小部分记录的函数可用.如果我查看Observable类的实现,确实只实现了一些记录的函数.大多数函数(其中包括publish函数)仅在没有任何实际实现的情况下声明为函数签名.

我在这里做了一些明显错误的事情,还是我完全误解了如何使用RxJS observables?

如果重要的话,我正在构建gulp,使用npm来解析和下载依赖项,并在我的node_modules目录中包含rxjs/bundles/Rx.js.



1> Thierry Temp..:

事实上,我认为使用a ConnectableObservable是没有必要的.这是我做的测试,并在收到响应时调用两个订阅者:

var observable =
  this.http.get('https://angular2.apispark.net/v1/companies/')
           .map(res => res.json());

observable.subscribe(
  data => console.log('subscribe #1'));
observable.subscribe(
  data => console.log('subscribe #2'));

编辑

我认为share操作员可以满足您的需求:

var observable =
  this.http.get('https://angular2.apispark.net/v1/companies/')
           .map(res => res.json()).share();

observable.subscribe(
  data => console.log('subscribe #1'));
observable.subscribe(
  data => console.log('subscribe #2'));

它允许创建一个可连接的observable(该share方法返回一个hot observable).在这种情况下,只执行一个HTTP请求...

这个问题可能对您有所帮助:来自EventEmitter的热门和共享Observable.

EDIT1

在评论中进行了一些讨论后,似乎问题是关于为什么发生以下错误:TypeError: obs.share is not a function为什么几乎所有记录的函数在post函数返回的observable中都不可用.

所以解决方案是显式导入RxJS运算符以使它们在运行时可用.

有两种解决方案.每个运营商导入:

import 'rxjs/add/operator/map'

或者更常见的是,如果您想要为可观察对象提供所有可用的运算符方法:

import 'rxjs/Rx';

希望它对你有帮助,蒂埃里

推荐阅读
携手相约幸福
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有