是否有管道运算符可以在订阅解析之前运行代码?例如:http通话

塞德里克·S

我正在进行HTTP调用,并且想要在进行HTTP调用之前设置加载指示器。此刻我正在做:

this.loadingIndicatorService.setLoadingIndicatorOn(true)
    this.cop.getunMappedTechnologyDetails().pipe(
      finalize(() => {
        this.loadingIndicatorService.setLoadingIndicatorOn(false);
      }),
    ).subscribe(
      res => {...}

但是我想尽可能在​​管道内设置loadingindicator,以确保它可以运行,并且可以轻松地将其复制/粘贴到所有订阅的前面。(我已经研究过AOP,但在这种情况下似乎不切实际)

tap不起作用,因为它先获取然后对结果起作用,但是我将其显示为可视化的内容:

this.cop.getunMappedTechnologyDetails().pipe(
      tap(() => this.loadingIndicatorService.setLoadingIndicatorOn(true)),
      finalize(() => {
        this.loadingIndicatorService.setLoadingIndicatorOn(false);
      }),
    ).subscribe(
      res => {...}

我可能也正在研究泛型函数,但是现在我需要一个快速的解决方案,可以在订阅之前将这些管道粘贴到这些管道中。

编辑:我已经尝试过推迟使用Jan-Niklas Wortmann选项,但是在.pipe上出现错误:

然后,我尝试在管道内使用它:

this.cop.getunMappedSafeDetails().pipe(
      defer(() => {
        this.loadingIndicatorService.setLoadingIndicatorOn(true);
        return this.cop.getunMappedSafeDetails();
      }),
      finalize(() => {
        this.loadingIndicatorService.setLoadingIndicatorOn(false);
      }),
    ).subscribe(...);

但是我有错误:

Argument of type 'Observable<String[]>' is not assignable to parameter of type 'OperatorFunction<String[], {}>'.
  Type 'Observable<String[]>' provides no match for the signature '(source: Observable<String[]>): Observable<{}>'.
戈加·科雷利(Goga Koreli)

这样写:

this.cop.getunMappedTechnologyDetails().pipe(
  startWithTap(() => this.loadingIndicatorService.setLoadingIndicatorOn(true)),
  finalize(() => this.loadingIndicatorService.setLoadingIndicatorOn(false)),
)

每当您订阅上述Observable时,startWithTap将立即执行您通过的所有内容,然后切换到原始Observable。最后,finalize将在源Observable完成时执行回调。

以及它的自定义运算符:

import { Observable, of } from 'rxjs';
import { switchMap, tap } from 'rxjs/operators';

export function startWithTap<T>(callback: () => void) {
  return (source: Observable<T>) =>
    of({}).pipe(tap(callback), switchMap((o) => source));
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

PureScript是否具有管道运算符?

是否可以有多个采摘运算符(rxjs)

(前向)管道运算符可以/是否可以阻止尾部调用优化?

新的管道运算符 |> 在 RStudio 中给出了“意外令牌”标志,尽管代码运行正常

是否可以在管道内使用三元运算符?

函数调用后是否可以使用管道运算符调用返回?

Prolog是否具有别名“运算符”,例如Haskell?

是否有任何可变集合的运算符方法可以将结果写回可变运算符调用程序或参数?

正确传递bash语法(管道运算符)以正常运行

RxJs:可以将运算符作为参数传播到管道运算符中吗

Haskell的绑定运算符(>> =)是否等于F#的正向管道运算符(|>)?

如果仅使用一个运算符,是否应该使用管道运算符?

这个异步管道运算符可以吗

我可以将管道运算符用作OR语句吗?

MiniKanren是否具有“ not”运算符?

ByteString是否有追加运算符?

是否有参数的合并运算符?

int是否有运算符==

是否有{}个运算符?

Typescript是否有运算符重载?

MASM是否具有::运算符?

范围解析运算符之前的类名称指针

是否可以在三元运算符中包含语句(在生成的代码中)?

通过使用sizeof运算符是否可以很好地定义此代码?

具有%>%管道的dplyr中的链算术运算符

Julia:管道运算符|>具有多个参数

Ruby正则表达式在Perl中是否具有不匹配的运算符,例如“!〜”?

是否可以在带有运算符重载的结构上抑制从null隐式转换?

正则表达式是否可以匹配`|`运算符中所有令牌组合