繁体   English   中英

如何更改 Observable (RxJs) 中的参数

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM