发表在

角训练

使用RxJs中的tap操作符的3个原因

利用操作符是我最喜欢和最常用的rxj特性之一。因此,今天,我将重点介绍三个不同且方便的用例利用算子

通过记录数据流中发生的事情进行调试

这是可视化可观察流管道中发生的事情的最简单方法之一。利用可以用来监视流而不改变流的行为:

observable.pipe (
地图(post => post.email),
利用(console.log),
过滤器(email => email. startswith(“A”)),
利用(data => console.log(data))

在上面的例子中,利用操作人员将数据“按原样”记录在控制台中,这是确保数据按照预期进行过滤和转换的完美方法。

请注意,水龙头(console.log)的缩写利用(data => console.log(data)).这两个版本的工作方式相同。

将副作用定义为数据更改

开发人员经常过早地订阅可观测数据,因为他们需要在特定时间点上获得一些数据,因此他们最终会在那个时间点订阅以接收数据。

利用operator可以通过在你的流上注册一个副作用来解决这个问题,这是一种华丽的说法,“我想在数据发生变化时运行一些代码”。

最佳实践是依赖于异步管道自动订阅和取消订阅我们的可观察对象.使用tap操作器,我们可以在“其他地方”访问数据的同时实现最佳实践。

我们以a为例LoginService它有一个登录方法。登录方法发出HTTP请求以从服务器接收身份验证令牌。如果我们需要在该服务中存储当前的用户名和令牌,那么订阅HTTP请求的Observable是很有吸引力的,但这将阻止我们从调用代码开始订阅。

以下是如何使用tap来防止过早订阅:

登录(用户名、密码):可见<字符串>
返回this.http.put('http://server.com/login',{用户名,密码})
.pipe (
利用(数据=> {
这一点。currentUser =用户名;
这一点。isLoggedIn = true;
这一点。authToken = data['token'];
}),

地图(tokenObj => tokenObj['token'])
);

在这个例子中,login方法返回一个Observable,不订阅,仍然设法注册一个副作用利用这将捕获任何用户名/令牌更改以更新其内部状态。

此外,调用组件还可以在需要时注册它的副作用,使用管道方法来保持链接更多的操作符:

this.loginService。登录(username, password).pipe(
点击(token => this.)Token = Token)
);

观察内部可观察对象的完成情况

利用在内部可观察对象中监听补全也很方便。这可以通过以下语法实现:

observable.pipe (
concatMap(n => otherObservable.pipe(
take(Math.round(Math.random() * 10)),
Map ((data) => data.done),
水龙头({
complete: () => console.log(' Done with ${n} ')
})

))

注意,您可以使用该语法在tap操作符中注册通常的三个回调。然而,这三个属性/回调都是可选的:

水龙头({
next: (data) => //当接收到数据时运行,
complete:() => //在Observable完成时运行,
error: (error) => //该函数将在Observable错误时运行,
})

如果你在使用利用以一种创造性的方式,请在评论中告诉我。看到简单的RxJs操作符可以实现什么总是令人印象深刻的。

我叫betway必威滚球.我是Angular的谷歌开发专家,也是角训练在那里我帮助web开发团队学习并熟悉Angular。

如果您在网页开发方面需要任何帮助,请随时与我们联系!

如果你喜欢这篇文章,请鼓掌或分享。你的帮助我永远感激。你也可以点击此处订阅Medium

使用Medium应用程序

一个写着“在应用商店下载”的按钮,如果点击它将引导你进入iOS应用商店
一个写着“开始吧,谷歌Play”的按钮,如果点击它,就会引导你进入谷歌Play商店
Baidu
map