【问题标题】:Asynchronous equivalent to tap() in RxJS?异步等效于 RxJS 中的 tap()?
【发布时间】:2018-11-14 18:33:58
【问题描述】:

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

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

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

【问题讨论】:

    标签: rxjs observable


    【解决方案1】:

    如果我理解正确,您想忽略内部 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

    【讨论】:

    • 嗯,没有switchMap(),requestAndAssignToken() 实际上不会运行。我不确定如何在该订阅中工作。
    • 这很奇怪。你订阅user了吗?
    • 这里是一个简单的复制:stackblitz.com/edit/rxjs-n3lqhb?devtoolsheight=60
    • 好的,这似乎可行,而且看起来很简单。谢谢!
    • delayWhen 是:@deprecated In future versions, empty notifiers will no longer re-emit the source value on the output observable
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多