angular - 如果以 Angular 调用两次,如何等待相同的可观察对象完成?

标签 angular rxjs

我的问题与如何“如何等待 observable 完成”不同。我已经使用 switchMap 在我的代码中解决了这个问题。目前我有一个 api get 调用,在执行 httpget 之前,它会检查 refreshToken 是否过期,在这种情况下,它会生成一个新 token 并等待它,然后执行很棒的 httpget。

我的问题是,如果我有以下情况:

this.getUsers();
this.getLocations();

让我们以 token 需要刷新的情况为例(我们需要等待刷新): 首先我们调用 this.getUsers() 这将触发创建一个新 token 并且获取用户将在创建 token 后发生。 同时,我们还调用 this.getLocations() ,它也将触发创建一个新 token ,并且不会等待第一个 get 完成。我需要找到一种方法,让第二个 get 等待第一个 get 完成,以便两者都使用相同的新 token 。

最佳答案

您在此场景中使用的 rxjs 运算符是 forkJoin()

Observable.forkJoin(
    this.http.get('/app/getUser').map((res: Response) => res.json()),
    this.http.get('/app/getLocation').map((res: Response) => res.json())
).subscribe(
  data => {
    this.users = data[0]
    this.locations = data[1]
  },
  err => console.error(err)
);

请参阅此示例:Example of stackoverflow

另请参阅此以利用 Angular 中的 Observable:Take Advantage of Observable

关于angular - 如果以 Angular 调用两次,如何等待相同的可观察对象完成?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53863111/

相关文章:

angular - 所有项目的 MAT_RADIO_DEFAULT_OPTIONS

跨组件分布的 Angular 2 形式

java - 从客户端实现的 Angular 来看,我可以将 Java Callable 与 Angular Observable (RxJS) 进行比较吗

node.js - 在 Angular 应用程序中实现服务的正确方法是什么?

angular - 如何导入其他模块组件可以识别的一次性全局模块

Angular CLI Assets 文件夹不会进入 dist 文件夹

javascript - 如何使用 observable rxJS 过滤 json

javascript - 如何关闭点击外部的下拉菜单?

javascript - 如何取消订阅或处理 Angular2 或 RxJS 中的条件可观察间隔?

rxjs - 如何在订阅方法中取消订阅 RXJS 订阅?