【问题标题】:I would like to have an observable behaving like a promise我希望有一个可观察的行为,就像一个承诺
【发布时间】:2018-02-26 12:50:37
【问题描述】:

var promise = http.get().toPromise(); 给出一个执行一次的承诺。

所以无论promise.then() 被调用多少次,http 请求都只会执行一次。

如何使用 observable 实现相同的功能?:var observable = http.get().??? 以便 obversable.subscribe() 只执行一次 http 请求?

【问题讨论】:

  • 使用shareReplay 运算符。
  • 好的,做到了!谢谢

标签: rxjs angular5 rxjs5 angular4-httpclient


【解决方案1】:

你可以像这样使用下面的 rxjs 操作符 'take' 导入运算符

import { take } from 'rxjs/operators';

并像这样使用它

this.http.get(`${this.url}/${agentId}/intents/${intentId}`)
            .pipe(take(1),
                catchError(error => Observable.throw(error)));

但这只会发出一个值,即最新值,如果您再次调用此函数,则不会阻止 Observable 调用请求。

【讨论】:

    【解决方案2】:

    下面的代码做到了: 从 'rxjs/operators' 导入 { shareReplay };

    this.http.get("xxx").pipe(shareReplay(1));

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-23
      • 2017-05-07
      • 2019-02-20
      • 1970-01-01
      • 1970-01-01
      • 2020-01-25
      • 2019-07-27
      相关资源
      最近更新 更多