【问题标题】:No response while using takeWhile in angular 6 for polling api using http使用 Angular 6 中的 takeWhile 使用 http 轮询 api 时没有响应
【发布时间】:2018-09-12 17:24:41
【问题描述】:

我有一个客户端 API,我想轮询它直到它返回成功结果,这个 API 返回一个带有以下 JSON 的响应。

{
"count": 0,
"meta": {
    "status": "PENDING",
    "total": 3185,
    "completion_percentage": 0,
    "total_available": 0,
    "hotels_filtered": 0,
    "offers": 0
},
data:[]
}

一个肯定的结果应该包含 status ='COMPLETED' 并且数据字段将包含数据中的结果,我尝试使用 takeWhile from 'rxjs'

组件.ts

var headers = { headers: new HttpHeaders({ 'x-user-agent':'M;B2B' }) };

var url='https://api.xyz.com/hotels/v1/search/entity/27548283?apikey=1234567'

this.http.get(url,headers)
.pipe(
  takeWhile((data)=>JSON.parse(JSON.stringify(data)).meta.status==='COMPLETED') 
)
.subscribe((result)=>{
  console.log(result);

},(err)=>{
  console.log(err);

})

但不幸的是,我没有得到任何订阅日志方法, 这是正确的方法吗?

我的角度版本是 6。

【问题讨论】:

    标签: angular rxjs angular6 polling


    【解决方案1】:

    我认为您正在寻找retryWhen 运营商:

    let httpGet$ = this.http.get(url, headers);
    let retryFilter = data => JSON.parse(JSON.stringify(data)).meta.status !== 'COMPLETED';
    
    httpGet$.pipe(
      map(data => {
        if(retryFilter(data)) {
          throw 'retry';
        }
        return val;
      }),
      retryWhen(_ =>
        // retry after 3 sek when retryFilter (above) failed
        _.pipe(delayWhen(_ => timer(3000))),
      )
    ).subscribe(result => console.log(result));
    

    【讨论】:

      猜你喜欢
      • 2018-12-05
      • 1970-01-01
      • 1970-01-01
      • 2019-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多