我在Angular 2中使用HTTP提供程序从API进行数据加载。
return this.http.post(url, urlSearchParams.toString(), {
headers: this.getHttpHeaders()
})
.retryWhen((error) => {
return this.handleRetryError(error);
})
当没有或旧会话时,我在this.handleRetryError(错误)中创建新的会话并用它填充标题。 (方法getHttpHeaders()返回带标题的数组)
重试当尝试再次发布此帖子时,但第一轮中有未更改的(旧)标题。
是否有机会从.readyWhen更改http.post的header参数?
非常感谢您的帮助:)
答案 0 :(得分:1)
你需要包装Observable并重试生成的外部Observable,以便每次再次执行。
https://plnkr.co/edit/nCvaC6vJYEBJYeVENz9N?p=preview
Observable.of(1).mergeMap(x=> {
return this.http.get('data.json', this.configObject())
.do(x => throw(x))
.map(res=>res.json());
})
.retryWhen(e => e.delay(2000))
.subscribe();
代码
return Observable.of(1).mergeMap(x => {
return this.http.post(url, urlSearchParams.toString(), {
headers: this.getHttpHeaders()
});
})
.retryWhen(e => this.handleRetryError(e))
答案 1 :(得分:0)
试试这个:
return Observable
.defer(() => {
this.http.post(url, urlSearchParams.toString(), {
headers: this.getHttpHeaders()
});
})
.retryWhen(errors => {
this.handleRetryError(errors);
return errors.delay(200)
});
答案 2 :(得分:0)
你可以在该函数之外保留对headers变量的引用,然后在retryWhen函数中修改该变量。
let headers = this.getHttpHeaders();
return this.http.post(url, urlSearchParams.toString(), {
headers: headers
})
.retryWhen((error) => {
headers.foo = "bar";
return this.handleRetryError(error);
})