只有在使用 Pipeable Operators 时才有副作用?

Side-effects only when using Pipeable Operators?

我正在重写我的一些代码以使用 Pipeable Operators 代替 "patch" 运算符,我对何时使用 pipe() 以及如何订阅管道有点困惑Observable 到 "activate" 如果我只想要副作用?

比如我有这个代码:

this.messages$ = this.messageService.getMessages(messageType)
    .do((messages: Message[]) => {
        console.log('The first message is ' + deviceMessages[0].text);
    });

我在这里感到困惑,因为我想我想做 this.messageService.getMessages(messageType).pipe(...) 所以我得到一个 Observable returned 并分配给 this.messages$ 但那不会执行,因为我还没有 subscribe()。但是如果我这样做 .pipe(...).subscribe() 那么它将 return 一个 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()