Angular 5如何设置最小延迟(或超时)



请求的代码很简单:

getItem() {
return this.http
.post<ItemModel>(`${this.apiUrl}/${methodUrl}`, {})
.subscribe(response => {
...
});
}

有两种情况取决于服务器处理请求的时间:我们在不到1分钟和超过1分钟的时间内重新发送响应。

我需要为第一种情况设置1分钟的最小延迟,当我们认为反应很快,比1分钟内更快时。

但我不能像这样简单地添加响应延迟=>{}:

getItem() {
return this.http
.post<ItemModel>(`${this.apiUrl}/${methodUrl}`, {})
.subscribe(response => {
setTimeout(()=>{ ... }, timeoutValue)
...
});
}

因为在这种情况下,延迟时间与响应时间的总和,例如,如果响应0.5分钟,timeoutValue==1分钟,我们将等待1.5分钟。我需要以某种方式将最小总时间设置为1分钟。

我该如何设置?

您可以使用forkJoin

getItem() {
return this.http
.post<ItemModel>(`${this.apiUrl}/${methodUrl}`, {})
.subscribe(response => {
...
});
}

getItemDelayed() {
return forkJoin(
getItem(),
interval(1000).pipe(take(1))
)
}

这样,每个可观察到的结果都将并行执行,但只有当两者完成时才会发送结果。

所以,若请求的时间少于一秒钟,结果将在一秒钟内到达。

使用rxjsdelay()

getItem() {
return this.http
.post<ItemModel>(`${this.apiUrl}/${methodUrl}`, {})
.pipe(delay(60000)) // <- One min delay
.subscribe(response => {
...
});
}

相关内容

  • 没有找到相关文章

最新更新