使Http请求观察并返回一个可观察的结果



我有以下场景:有一个名为"ContextProvider"的服务,它保存有关应用程序上下文的信息(登录用户、他可以访问的内容等(。现在我观察如下:

this.contextProvider.Context.subscribe(context => {
//Do Something
})

现在我有一个服务,也将是可观察的。我希望此服务观察上下文并返回可观察的。有了地图功能,这将很容易:

let observable = this.contextProvider.Context.pipe(map(context => {
let aux: number = somevar + someothervar;
return aux;
})) //observable variable now holds the type Observable<number>

我的场景有点复杂,因为为了获取结果,我必须进行Http调用,这也是一个可观察/承诺:

let observable = this.contextProvider.Context.pipe(map(context => {
return this.httpClient.get<number>("Some URL").pipe(take(1));
})); //observable var now holds Obsevable<Observable<number>>

如何使"可观测"var保持可观测?

编辑:URL值取决于"上下文"变量的一些值

如果我理解你的问题,你需要在这种情况下使用concatMap,比如这个

this.contextProvider.Context.pipe(
concatMap(context => {
return this.httpClient.get<number>("Some URL" + context.someData);
}));

在本文中,您可以找到更多关于使用Observables和http调用的模式

最新更新