请求的代码很简单:
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 => {
...
});
}