有人知道如何在RxJS的HttpClient.get
方法返回的观察者上使用do
运算符吗?
版本:
用这个版本的角,我不能这样做:
import { HttpClient } from '@angular/common/http';
...
constructor(
private http: HttpClient,
) { }
...
this.http.get<Item>(url)
.do(res => console.log(JSON.stringify(res)))
.share();
相反,我必须使用管道添加新的步骤。我可以用switchMap
、map
或share
来做这件事,但我不知道如何用do
来做。
我发现我可以做import { _do } from 'rxjs/operator/do';
,但是当我尝试像这样使用它时:
this.http.get<Item>(url)
.pipe(_do(res => console.log(JSON.stringify(res)))
或者像这样:
const observable = this.http.get<Item>(url);
observable.pipe(_do(observable, res => console.log(JSON.stringify(res)}));
我搞错了:
[ts] The 'this' context of type 'void' is not assignable to method's 'this' of type 'Observable<{}>'.
发布于 2018-01-20 22:10:43
正如可贯通算子文档所解释的那样,可调用do
与其他几个文件一起被重命名为tap
。这样做是为了避免与保留的JavaScript关键字发生冲突。
Pipeable操作符应该作为
import { tap } from 'rxjs/operators/tap';
注意,管道运算符位于rxjs/operators/...
中,而rxjs/operator/...
导入用于修补Observable.prototype
。
没有任何问题会阻止do
操作符被使用一些角度版本。这两种导入样式都是支持和有效的,只要开发人员理解补丁运算符和管道运算符之间存在某些差异,这使得后者在某些情况下更可取。它们在文件页上得到解释
发布于 2018-01-20 22:04:30
我在这个答案的帮助下修复了它。
实际上,我进口错了。此代码适用于:
import 'rxjs/add/operator/do';
...
this.http.get<Item>(url)
.do(res => console.log(JSON.stringify(res))
https://stackoverflow.com/questions/48361439
复制相似问题