Angular 中的延迟 HTTP 请求

Mar*_*sch 4 rxjs angular rxjs6

我很好奇。我只是试图延迟 Angular (6.x) 中的 HTTP 请求,.pipe( delay( 5000 ) )...但看起来,RxJS 只是延迟了最终响应,而不是服务器调用。但我真的需要延迟真正的服务器调用。通过 HttpInterceptor 在 AngularJS 中这不是问题,但我无法让它工作。有任何想法吗?

提前谢谢。

更新:

我已经尝试过 HttpInterceptor 但这也不起作用。我有一个 CustomHttpClient,它将正在运行的请求 url 放入一个数组中,并在完成后将其删除。某些请求无法并行运行,因此我必须检查列表中是否有来自 /api/somePath 的待处理调用。如果这样的 url 在列表中,则必须延迟当前请求。在 AngularJS 的 HttpInterceptor 中工作正常。

Jan*_*ker 5

我喜欢那些拦截器,因为你可以用它们做很多魔法。

在拦截器中处理 http 调用的 RESPONSE

intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
    return next.handle(request).pipe(
      tap(response=> console.log(response) )  // <== or do some other magic
    );
  }
}
Run Code Online (Sandbox Code Playgroud)

在拦截器中处理 http 调用的请求,例如延迟它。

intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
    return timer(2000).pipe(         // <== Wait 2 Seconds
      switchMap( ()=> next.handle(request) )   // <== Switch to the Http Stream
    )
  }
}
Run Code Online (Sandbox Code Playgroud)

在这两种情况下,它是相同的“intercept(...)”方法,但对“next.handle()”的处理不同。

温暖的问候


Mos*_*she 0

你可以使用RxJSObservable.timer

let myRequest = this.http.get(...);
let pollingSubscription = myRequest
 .expand(() => Observable.timer(5000).flatMap(() => myRequest))
 .subscribe();
Run Code Online (Sandbox Code Playgroud)