Angular Rx js repeatWhen: когда все статусы НЕ ЗАВЕРШЕНЫ - PullRequest
2 голосов
/ 14 июля 2020

Я хочу повторить попытку (нажмите тот же URL-адрес до 5 раз с задержкой 5se c) тот же URL, если я не получил, все статусы «ЗАВЕРШЕНО» в Angular Сервисный файл

[  
  {  
    "data": [   
      //SET OF OBJECTS  
    ],  
    "status": "COMPLETED"  
  },
  {  
    "data": [  
    //SET OF OBJECTS  
    ],  
    "status": "NO_DATA_FOUND"  
  }  
]```

Ответы [ 2 ]

0 голосов
/ 14 июля 2020

Не уверен, как выглядит ваш код, но я думаю, что этот подход должен работать:

src$.pipe(
  retryWhen(
    errSbj => errSbj.pipe(
      delay(/* ... */),
      take(5),

      // Until it receives a `COMPLETED` status
      takeUntil(statusCompleted$)
    )
  )
)

Когда statusCompleted$ испускает, весь поток будет complete.

0 голосов
/ 14 июля 2020

попробуйте это

this.http.get().pipe(
  map(res => {
   res.array.forEach(el => {
    if (el.status !== "completed") {
      //error will be catched by retryWhen
      throw res;
    }     
   })
   return res;
  }),
  retry(5),
  retryWhen(errors => errors.pipe(delay(1000)))
)
...