我对rxjs和可观察性比较陌生。我正在尝试编写一个服务方法,该方法返回一个观察值,当订阅该观察值时,将输出HTTP请求的结果。但是,在发出请求之前,我必须确保存在正确的授权令牌(它不会总是存在)。
下面是我想出的完成这项任务的方法:
getDataFromHTTPCall (): Observable {
return new Observable(subscriber => {
if (this.authorizationToken == null) {
subscriber.error("Authorization Token Required")
} else {
subscriber.next(
from(
axios.get(`${this.baseUrl}/getData}`, { headers: {'Authorization': this.authorizationToken }})
).pipe(
map(result => result.data),
catchError( (err) => {
console.log(err)
return EMPTY
})
)
)
}
})
}这在技术上是可行的,但它有一些主要问题。最值得注意的是,通过将一个可观察对象传递给一个可观察对象,它需要此函数的调用者订阅两次。我一直在读到,可观察对象永远不应该像这样嵌套,我明白为什么这不是我们想要的。
我感觉有一种更好的方法来完成我想要做的事情。有人能建议一个更好的方法来使用观察物来完成这类任务吗?
发布于 2021-03-01 06:12:17
从发出
然后使用
调用http服务,如果
是否为空?
代码如下所示
getDataFromHTTPCall() {
return of(this.authorizationToken).pipe(
concatMap(authToken => {
if (authToken == null) {
throw new Error("Authorization Token Required")
}
return from(axios.get(`${this.baseUrl}/getData}`,
{ headers: {'Authorization': authToken }})
).pipe(
map(result => result.data),
catchError( (err) => {
console.log(err)
return EMPTY
})
)
})
)
}发布于 2021-03-01 06:41:54
该函数的逻辑听起来类似于“如果您没有存储的凭据,则抛出错误,否则通过某个管道返回axios调用put”。转换为RxJS后,可能如下所示:
getDataFromHTTPCall(): Observable {
return this.authorizationToken == null
? throwError('Authorization Token Required')
: from(
axios.get(`${this.baseUrl}/getData}`, {
headers: {Authorization: this.authorizationToken},
}).pipe(/* etc */)
);
}https://stackoverflow.com/questions/66413800
复制相似问题