如何使用Obserservable创建一个httpGate
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用Obserservable创建一个httpGate相关的知识,希望对你有一定的参考价值。
我有多个请求要暂停,直到验证身份验证http请求为止。这意味着我应该有一个http门,请求可以通过而不必进行身份验证,有些人会等到身份验证令牌回来。
我想过使用像下面的代码一样的switchmap但是它不会工作,因为一个带有返回值的可观察开关。
intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
return next.handle(req)
.switchMap((event: HttpEvent<any>, index: number): Observable<HttpEv
ent<any>> => {
// without the **req.url.indexOf('/index')>-1**
//// Error Meassage: ***You provided 'undefined' where a stream was expected. You can provide an Observable, Promise, Array, or Iterable.***
if(this.token || req.url.indexOf('/index')>-1) {
return Observable.of(event);
}
})
.do(
next: function(data){
console.log(data);
},
error: function(error: HttpErrorResponse){
// retry
// or handling data
}
);
错误信息
您在预期的流中提供了“未定义”。您可以提供Observable,Promise,Array或Iterable。
答案
而不是从intercept()
做,我建议你创建自己的ApiService
,暴露一些方法,并从那里进行所有的HTTP调用。
在你的ApiService
内,你可以有例如:
Get(url: string): Observable {
return of(0).pipe(
switchMap(() => this.waitForAuth()),
switchMap(() => this.$http.get(url))
);
}
因此,每次调用端点时,您的请求都将挂起,直到用户通过身份验证。或者,如果用户已经过身份验证,它会立即拨打电话。
以上是关于如何使用Obserservable创建一个httpGate的主要内容,如果未能解决你的问题,请参考以下文章