首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何实现对HttpClient.get可观察性再通的副作用?

如何实现对HttpClient.get可观察性再通的副作用?
EN

Stack Overflow用户
提问于 2018-01-20 21:47:12
回答 2查看 744关注 0票数 2

有人知道如何在RxJS的HttpClient.get方法返回的观察者上使用do运算符吗?

版本:

  • 角度: 5.2.1
  • rxjs: 5.5.6

用这个版本的角,我不能这样做:

代码语言:javascript
运行
复制
import { HttpClient } from '@angular/common/http';

...

constructor(
  private http: HttpClient,
) { }

...

this.http.get<Item>(url)
  .do(res => console.log(JSON.stringify(res)))
  .share();

相反,我必须使用管道添加新的步骤。我可以用switchMapmapshare来做这件事,但我不知道如何用do来做。

我发现我可以做import { _do } from 'rxjs/operator/do';,但是当我尝试像这样使用它时:

代码语言:javascript
运行
复制
this.http.get<Item>(url)
  .pipe(_do(res => console.log(JSON.stringify(res)))

或者像这样:

代码语言:javascript
运行
复制
const observable = this.http.get<Item>(url);
observable.pipe(_do(observable, res => console.log(JSON.stringify(res)}));

我搞错了:

代码语言:javascript
运行
复制
[ts] The 'this' context of type 'void' is not assignable to method's 'this' of type 'Observable<{}>'.
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-01-20 22:10:43

正如可贯通算子文档所解释的那样,可调用do与其他几个文件一起被重命名为tap。这样做是为了避免与保留的JavaScript关键字发生冲突。

Pipeable操作符应该作为

代码语言:javascript
运行
复制
import { tap } from 'rxjs/operators/tap';

注意,管道运算符位于rxjs/operators/...中,而rxjs/operator/...导入用于修补Observable.prototype

没有任何问题会阻止do操作符被使用一些角度版本。这两种导入样式都是支持和有效的,只要开发人员理解补丁运算符和管道运算符之间存在某些差异,这使得后者在某些情况下更可取。它们在文件页上得到解释

  1. 任何导入修补程序操作符的库都将为该库的所有使用者增加Observable.prototype,从而创建盲依赖关系。如果图书馆删除了它们的使用,它们就会不知不觉地破坏其他人的使用。对于pipeable,您必须将所需的运算符导入到您使用它们的每个文件中。
  2. 直接安装在原型机上的操作人员不会被卷起或webpack这样的工具“树震”。Pipeable运算符将是因为它们只是直接从模块中拉进来的函数。
  3. 任何类型的构建工具或林特规则都无法可靠地检测到在应用程序中导入的未使用的操作员。这意味着您可以导入扫描,但是停止使用它,并且它仍然被添加到输出包中。如果你不使用管道操作符,一条衣领规则可以帮你捡到它。
  4. 功能构图太棒了。构建您自己的自定义操作符变得非常、非常容易,现在它们的工作和外观就像rxjs中的所有其他操作符一样。你不需要再延长可观测范围或超越电梯了。
票数 1
EN

Stack Overflow用户

发布于 2018-01-20 22:04:30

我在这个答案的帮助下修复了它。

实际上,我进口错了。此代码适用于:

代码语言:javascript
运行
复制
import 'rxjs/add/operator/do';

...

this.http.get<Item>(url)
  .do(res => console.log(JSON.stringify(res))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48361439

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档