【发布时间】:2018-02-01 17:46:25
【问题描述】:
使用 RxJs 5 和 Angular 4。
我想共享一个 observable,这样我只发出 1 个 Http 请求,我还想等待调用,以便在我请求时得到结果。我有以下代码:
export class DataService {
constructor(public http: HttpClient) {
this.getObservable();
}
public observable;
public getObservable() {
const url = "api/getData";
this.observable = this.http.get(`${this.baseUrl}${url}`).share()
}
public async hasData(data: DataEnum) {
const result = await this.observable.toPromise();
return result.filter(x => x === data).length > 0;
}
}
然而,对 hasData 的多次调用会导致对我们的 api 端点的多次调用。我假设我已将observable 设置为共享的可观察对象,当我调用.toPromise() 时,它只会获取缓存的值并使其成为一个承诺,我可以await。
它应该是这样工作的吗?
【问题讨论】:
-
你为什么要这样做?我们可以帮助您获得更好的技术吗?
-
如果你已经在使用 Promise,有什么东西会阻止你保存 Promise 吗?这将非常简单。共享运算符在这里无法正常工作。
-
@Microsmsm 代码已简化:) 当应用程序加载时,我需要知道将用户引导到哪里 - 因此需要等待结果。该数据还包含 HTML 模板中请求的其他一些信息,因此我们收到了很多电话,我想分享这些信息。
-
@estus 随意发布答案,这听起来很有希望!
标签: javascript angular rxjs