[英]How to change parameter in Observable (RxJs)
我在 Angular 2 中使用 HTTP 提供程序从 API 加载数据。
return this.http.post(url, urlSearchParams.toString(), {
headers: this.getHttpHeaders()
})
.retryWhen((error) => {
return this.handleRetryError(error);
})
当没有或旧会话时,我在 this.handleRetryError(error) 中创建新会话并用它填充标题。 (方法 getHttpHeaders() 返回带有标题的数组)
RetryWhen 尝试再次发布此帖子,但第一轮中的(旧)标题没有变化。
是否有机会从 .readyWhen 更改 http.post 的 headers 参数?
非常感谢您的帮助:)
您需要包装 Observable 并重试生成的外部 Observable,以便每次再次执行时。
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))
尝试这个:
return Observable
.defer(() => {
this.http.post(url, urlSearchParams.toString(), {
headers: this.getHttpHeaders()
});
})
.retryWhen(errors => {
this.handleRetryError(errors);
return errors.delay(200)
});
您可以在该函数外保留对 headers 变量的引用,然后在 retryWhen 函数内修改该变量。
let headers = this.getHttpHeaders();
return this.http.post(url, urlSearchParams.toString(), {
headers: headers
})
.retryWhen((error) => {
headers.foo = "bar";
return this.handleRetryError(error);
})
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.