Angular5 如何设置最小延迟(或超时)?
Angular 5 how to set minimal delay (or timeout)?
请求代码很简单:
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 分钟。
如何设置?
使用 rxjs delay()
.
getItem() {
return this.http
.post<ItemModel>(`${this.apiUrl}/${methodUrl}`, {})
.pipe(delay(60000)) // <- One min delay
.subscribe(response => {
...
});
}
你可以使用 forkJoin
getItem() {
return this.http
.post<ItemModel>(`${this.apiUrl}/${methodUrl}`, {})
.subscribe(response => {
...
});
}
getItemDelayed() {
return forkJoin(
getItem(),
interval(1000).pipe(take(1))
)
}
有了这个,每个可观察对象都将并行执行,但只有在两个都完成后才会发送结果。
所以如果请求不到一秒,结果将在一秒内到达。
请求代码很简单:
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 分钟。
如何设置?
使用 rxjs delay()
.
getItem() {
return this.http
.post<ItemModel>(`${this.apiUrl}/${methodUrl}`, {})
.pipe(delay(60000)) // <- One min delay
.subscribe(response => {
...
});
}
你可以使用 forkJoin
getItem() {
return this.http
.post<ItemModel>(`${this.apiUrl}/${methodUrl}`, {})
.subscribe(response => {
...
});
}
getItemDelayed() {
return forkJoin(
getItem(),
interval(1000).pipe(take(1))
)
}
有了这个,每个可观察对象都将并行执行,但只有在两个都完成后才会发送结果。
所以如果请求不到一秒,结果将在一秒内到达。