Rxjs 仅在使用可管道操作器时产生副作用?
我正在重写我的一些代码,以使用管道操作符来代替“补丁”操作符,我有点困惑于何时使用Rxjs 仅在使用可管道操作器时产生副作用?,rxjs,reactive-programming,rxjs-pipeable-operators,Rxjs,Reactive Programming,Rxjs Pipeable Operators,我正在重写我的一些代码,以使用管道操作符来代替“补丁”操作符,我有点困惑于何时使用pipe(),以及如果我只想要副作用,如何订阅管道可观察的来“激活”它 例如,我有以下代码: this.messages$ = this.messageService.getMessages(messageType) .do((messages: Message[]) => { console.log('The first message is ' + deviceMessages[0
pipe()
,以及如果我只想要副作用,如何订阅管道可观察的
来“激活”它
例如,我有以下代码:
this.messages$ = this.messageService.getMessages(messageType)
.do((messages: Message[]) => {
console.log('The first message is ' + deviceMessages[0].text);
});
我在这里感到困惑,因为我想我想做这个.messageService.getMessages(messageType).pipe(…)
,所以我得到了一个可观察的返回并分配给这个.messages$
,但由于我没有订阅()
'd,所以它不会执行。但是如果我执行.pipe(…).subscribe()
操作,那么它将返回一个Subscription
对象,这不是我想要的
我应该在这里做什么?好吧,就这样做:
this.messages$ = this.messageService.getMessages(messageType).pipe(
tap((messages: Message[]) => {
console.log('The first message is ' + deviceMessages[0].text);
})
);
this.messages$.subscribe();
tap操作符相当于rxjs 5及更高版本中的.do()
。好吧,只需这样做:
this.messages$ = this.messageService.getMessages(messageType).pipe(
tap((messages: Message[]) => {
console.log('The first message is ' + deviceMessages[0].text);
})
);
this.messages$.subscribe();
tap运算符相当于rxjs 5及以上版本中的.do()
。.pipe(tap(…)
相当于.do(…)
。无论您是否使用管道操作符,都不会改变可观察对象的工作方式,也不会改变您应该订阅的时间。您订阅触发事件的发射(这里,可能是通过发送HTTP请求),就像以前一样。@JBNizet那么您是说我应该保留do()
并保持原样吗?不,他/她是说将它切换到.pipe(点击(…)
,而不是。执行(…)
,其他任何事情都不必更改。不,它不应该,但是do()
也没有。您当前使用do()
的代码是否在不订阅的情况下执行某些操作?如果是这样,那就是一个bug。async
管道就是这样做的,是的。.pipe(点击(…)
相当于.do(…)
。无论您是否使用管道操作符,都不会改变可观察对象的工作方式,也不会改变您应该订阅的时间。您订阅触发事件的发射(这里,可能是通过发送HTTP请求),就像以前一样。@JBNizet那么您是说我应该保留do()
并保持原样吗?不,他/她是说将它切换到.pipe(点击(…)
,而不是。执行(…)
,其他任何事情都不必更改。不,它不应该,但是do()
也没有。您当前使用do()
的代码是否在不订阅的情况下执行某些操作?如果是这样,那就是一个bug。async
管道就是这样做的,是的。