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

Mat*_*hel 13 observable rxjs

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

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

  const user = requestUser().pipe( 
    switchMap(user => {
      return requestAndAssignToken(user)
        .pipe(
          map(token => user)
        );
    })
  );
Run Code Online (Sandbox Code Playgroud)

ggr*_*nig 16

如果我理解正确,你想忽略内部 Observable 的结果,只让外部 Observable 在继续之前等待它发出。

在这种情况下,我建议delayWhen运营商。它被传递一个delayDurationSelector返回一个 Observable (the duration Observable)。然后它的行为就像文档中所述

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

对于您的示例,它看起来像这样:

const user = requestUser().pipe( 
    delayWhen(user => requestAndAssignToken(user))
);
Run Code Online (Sandbox Code Playgroud)

这是一个简单的例子

  • `delayWhen` 是:`@deprecated 在未来版本中,空通知程序将不再重新发出输出可观察值上的源值` (2认同)