仅在使用管道运算符时会有副作用吗?

时间:2018-06-26 14:48:38

标签: rxjs reactive-programming rxjs-pipeable-operators

我正在重写我的一些代码,以使用管道运算符代替“补丁”运算符,并且我对何时使用pipe()以及如何订阅管道{{1}感到困惑。 }如果我只想要副作用,可以“激活”它?

例如,我有以下代码:

Observable

我在这里感到困惑是因为我认为自己想做this.messages$ = this.messageService.getMessages(messageType) .do((messages: Message[]) => { console.log('The first message is ' + deviceMessages[0].text); }); ,所以我得到了一个this.messageService.getMessages(messageType).pipe(...)返回并分配给Observable的信息,但是由于我没有{ {1}}。但是如果我做this.messages$,它将返回一个subscribe()对象,这不是我想要的。

我在这里应该做什么?

1 个答案:

答案 0 :(得分:2)

好吧,只需这样做:

it('should get current user', async () => {
    const response = new CustomResponseClass();
    response.success = true;
    response.error = null;
    const user = new User();
    user.userId = 1;
    user.name = 'Test User';
    response.data = user;
    service.getCurrentUser().then( _user => {
      console.log('USER', _user);
      // TODO: Some more unit tests here...
    });
    const req = httpMock.expectOne('/api/me');
    expect(req.request.method).toEqual('GET');
    req.flush(response);
  });

tap运算符等效于rxjs 5及更高版本中的this.messages$ = this.messageService.getMessages(messageType).pipe( tap((messages: Message[]) => { console.log('The first message is ' + deviceMessages[0].text); }) ); this.messages$.subscribe();