如何基于HTTP响应引入人为延迟

时间:2019-11-29 03:47:25

标签: angular rxjs

我有一个API,可以返回“ RequestedTooSoon”的响应并包含“ NotBefore”时间戳。

我的目标是引入人为延迟,以便任何消费者都觉得请求花费的时间比花费的时间更长。应该将响应延迟到“ NotBefore”时间过去。

// Consumer:
verifyAuth() {
  authService.verify(...).subscribe(...)
}

在我的AuthService.verify(...)方法内部,我试图节制,但是仔细阅读RxJS文档似乎变得很明显throttle不是我正在寻找的运营商:

this.apiHttp.post<VerificationResponse>('api/verify', ...)
  .pipe(
    throttle(response => {
      const nowInMs = Date.now();
      const throttle = response.NotBefore.getTime() - nowInMs;

      return timer(throttle);
    })
  )

我无法识别适当的运算符(如果存在)。

是否有一个开箱即用的运算符可以实现我所追求的目标?还是有更合适的方法?

我的下一步将是实现一个接受delay的{​​{1}}运算符。

1 个答案:

答案 0 :(得分:0)

已经存在一个延迟,看到它需要一个固定值,您将需要将Map切换到它,这样您就可以运行一个函数来确定输入时间

this.apiHttp.post<VerificationResponse>('api/verify', ...)
  .pipe(
    switchMap(response => of(response).pipe(
      delay(response.NotBefore.getTime() - (new Date()).getTime()))
    )
  )