发送http请求之前的Angular 2延迟

时间:2017-12-01 10:49:08

标签: angular rxjs observable

我在循环中为同一个API执行一些请求。在服务器端,我需要检查以前的结果以进行一些更改。但如果请求不止一个循环,我就无法看到之前的结果。

组件中的

this.service.createEmail(...).delay(5000).debounceTime(5000).timeout(5000).subscribe(...);

并在服务中:

createEmail(...): Observable<Json> {
    return this.http
            .post('url',
              JSON.stringify(model),
              { headers: this.headers })
            .delay(5000).debounceTime(5000).timeout(5000)
            .map((response: Response) => {
                return this.responseService.extractData(response);
            })
            .catch(error => {
                return this.errorService.handleError(error);
            });
        }

没有帮助我。 需要进口存在。 只是js setInterval帮助了我。

如何以其他方式在http请求之前做延迟?

1 个答案:

答案 0 :(得分:0)

您可以使用switchMap和timer:

createEmail(...): Observable<Json> {
   return Observable
            .timer(5000)
            .switchMap(() => 
                this.http.post(
                  'url', 
                  JSON.stringify(model),
                  {headers: this.headers}
                )
            )
            .map((response: Response) => {
                return this.responseService.extractData(response);
            })
            .catch(error => {
               return this.errorService.handleError(error);
            });
}

在switchMap之前,您可以添加debounceTime和另一个rx运算符。

我邀请您查看switchMap的文档以获取更多信息:https://www.learnrxjs.io/operators/transformation/switchmap.html

如果您不想立即传递观察结果,可以使用.delay。例如,我想在模拟API响应的延迟时使用它。