Нет ответа при использовании takeWhile в угловых 6 для опроса API с использованием http - PullRequest
0 голосов
/ 12 сентября 2018

У меня есть клиентский API, который я хочу опрашивать, пока он не вернет результат успеха, этот API возвращает ответ со следующим JSON.

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

и положительный результат должен содержать статус = 'ЗАВЕРШЕНО', а в поданные данные будет включен результат в данные, я попытался использовать takeWhile из 'rxjs'

component.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.

1 Ответ

0 голосов
/ 12 сентября 2018

Я думаю, что вы ищете 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));
...