如何使用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的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Apache HttpComponentst 创建和发布多部分/混合 http 请求?

如何使用quarkus创建本机可执行文件?

Http-Server 如何创建请求标头和响应标头

如何使用graph api创建url_like?

如何使用颤振 http 包设置基本 url 类?

在.NET 6 中如何创建和使用 HTTP 客户端 SDK