gpt4 book ai didi

javascript - RxJs:使用 async/await 共享 Observable

转载 作者:行者123 更新时间:2023-12-01 03:11:03 25 4
gpt4 key购买 nike

使用 RxJs 5 和 Angular 4。

我想共享一个可观察的,以便我只发出 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 设置为共享 observable,当我调用 .toPromise() 时,它只会获取缓存的值并使其成为一个 promise ,我可以等待

这是应该如何工作的吗?

最佳答案

由于 share 的工作原理,observabletoPromise 上重新订阅,这会产生新的请求。

Promise 已经提供了缓存行为。考虑到 Promise 已经在服务 API 中使用,它们可以单独使用:

constructor(public http: HttpClient) {
this.getPromise();
}

public promise;

public getPromise() {
const url = "api/getData";
this.promise = this.http.get(`${this.baseUrl}${url}`).toPromise()
}

public async hasData(data: DataEnum) {
const result = await this.promise;
return result.filter(x => x === data).length > 0;
}

关于javascript - RxJs:使用 async/await 共享 Observable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45851525/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com