异步等效于RxJS中的tap()?

时间:2018-11-14 18:33:58

标签: rxjs observable

我有一个副作用Observable,需要在主要Observable完成之前解决。如果是同步操作,则可以使用tap()运算符。异步操作是否有明确的等效项?

在下面的示例中,我必须将内部值映射回我实际要通过管道传递的外部值。我将如何避免这种映射?

  const user = requestUser().pipe( 
    switchMap(user => {
      return requestAndAssignToken(user)
        .pipe(
          map(token => user)
        );
    })
  );

1 个答案:

答案 0 :(得分:3)

如果我的理解正确,您想忽略内部Observable的结果,而只让外部Observable等待其发射,然后继续操作。

在这种情况下,我建议使用delayWhen运算符。它传递了一个delayDurationSelector并返回一个Observable(duration Observable)。然后,它的行为类似于stated in the documentation

  

仅当Observable持续时间发出值或完成时,才在Observable输出上发出源值

以您的示例为例:

const user = requestUser().pipe( 
    delayWhen(user => requestAndAssignToken(user))
);

Here is a simple example