首页 > 解决方案 > Angular Rxjs:使用异步管道连续发出所有合并的可观察对象

问题描述

大家好,我正在尝试在 html 文件中使用数据对象,并且我正在使用异步管道和主题来发出 id 并获取服务器响应。
这是我的代码:

     logDetails$: Observable<LogDetails>;
     getDetails$ = new Subject<string>();

     this.logDetails$ = this.getDetails$.pipe(
        map(id => ApiRoutes.fileLogDetailsApiRoute.replace(":id", id)),
        switchMap(apiRoute => this.http.get<LogDetails>(apiRoute))
    );

我在视图中使用异步管道来订阅结果。

*ngIf="logDetails$ | async; let details"

现在我想要这种行为:我从多个位置发出带有 id的getDetails$ 。
然后我需要在服务器调用值之前将结果发送到视图,然后在延迟一段时间后服务器响应(LogDetails 对象)

  1. 发送结果的默认值
  2. 延迟
  3. 发送服务器响应

我可以使用运算符来实现这一点吗?

标签: javascriptangularrxjsobservableasync-pipe

解决方案


您可以使用startWithdelay

this.logDetails$ = this.getDetails$.pipe(
  map(id => ApiRoutes.fileLogDetailsApiRoute.replace(":id", id)),
  switchMap(apiRoute => this.http.get<LogDetails>(apiRoute).pipe(
    delay(1000),
    startWith(null)
  )),
);

推荐阅读