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

时间:2018-10-28 18:55:54

标签: javascript angular timeout delay angular-universal

请求代码很简单:

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分钟。

如何设置?

2 个答案:

答案 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))
    )
}

与此同时,每个可观察的对象将并行执行,但是结果只有在两个对象完成时才发送。

因此,如果请求花费的时间少于一秒钟,结果将在一秒钟内到达。