请求代码很简单:
getItem() {
return this.http
.post<ItemModel>(`${this.apiUrl}/${methodUrl}`, {})
.subscribe(response => {
...
});
}
有两种情况取决于服务器处理请求的时间:我们在不到1分钟的时间内和超过1分钟的时间内重新响应sersponse。
在第一种情况下,我需要将最小延迟设置为1分钟,这样我们才能快速响应,然后在1分钟内更快。
但是我不能这样简单地在响应=> {}中添加延迟:
getItem() {
return this.http
.post<ItemModel>(`${this.apiUrl}/${methodUrl}`, {})
.subscribe(response => {
setTimeout(()=>{ ... }, timeoutValue)
...
});
}
因为在这种情况下,延迟时间与响应时间相加,例如,如果响应0.5分钟且timeoutValue == 1分钟,我们将等待1.5分钟。我需要将总总时间设置为1分钟。
如何设置?
答案 0 :(得分:0)
使用rxjs delay()
。
getItem() {
return this.http
.post<ItemModel>(`${this.apiUrl}/${methodUrl}`, {})
.pipe(delay(60000)) // <- One min delay
.subscribe(response => {
...
});
}
答案 1 :(得分:0)
您可以使用forkJoin
getItem() {
return this.http
.post<ItemModel>(`${this.apiUrl}/${methodUrl}`, {})
.subscribe(response => {
...
});
}
getItemDelayed() {
return forkJoin(
getItem(),
interval(1000).pipe(take(1))
)
}
与此同时,每个可观察的对象将并行执行,但是结果只有在两个对象完成时才发送。
因此,如果请求花费的时间少于一秒钟,结果将在一秒钟内到达。