如果一个依赖于另一个,则在Angular 2中失败时重试所有HTTP调用

时间:2016-08-10 16:09:30

标签: angular rxjs observable angular2-http

使用此Angular 2代码进行http调用' ./customer.json'然后使用其中返回的URL进行进一步调用。如果第二个调用使用rxjs重试方法失败,如何重试两个调用?目前它似乎只是重试第二个。

this.http.get('./customer.json')
.map((res: Response) => {
    this.customer = res.json();
    return this.customer;
})
.flatMap((customer) => {
    return this.http.get(customer.contractUrl)).map((res: Response) => res.json()
})
.retry(1);

因此,如果this.http.get(customer.contractUrl))失败,我该怎样让它再次重试http.get('./customer.json')this.http.get(customer.contractUrl))

1 个答案:

答案 0 :(得分:1)

我不确定为什么我的原始代码似乎无法正常工作,但我尝试使用catch方法,而且似乎有效。

makeCall(isRetry = false){
    return this.http.get('./customer.json')
        .map((res: Response) => {
            this.customer = res.json();
            return this.customer;
        })
        .flatMap((customer) => {
            return this.http.get(customer.contractUrl)).map((res: Response) => res.json()
        })
        .catch((err) => {
            if (isRetry === false){
                return this.makeCall(true);
            }

            return Observable.throw(err);
        });
}

我会制作一些jsbins,看看我是否能搞清楚