Угловая повторная попытка HttpClient RXJS, когда не работает - PullRequest
0 голосов
/ 13 октября 2019

В угловой я новичок в httpClient и пытаюсь реализовать решение для повторной попытки http-вызова, когда Интернет отключен, т.е. состояние ошибки = 0. Когда 3 неудачных попытки, я хотел бы, чтобы исходная ошибка ответа http вызвала.

Вот то, что я пытаюсь, но это не работает. Есть идеи?

return this.httpClient.post('https://server.com/logins', data, {headers: headers})
      .pipe(retryWhen(errors => errors
        .pipe(map((err, index) => {          
          // Caught Error, throw immediately
          if (!err) {
            throw err;
          } 
          if (err.status !== 0) {
            throw err;
          }
          // Disconnection error
          if (index === 2) {
            throw err;
          }
          return err;
        }))
        .pipe(delay(1000)))) 

1 Ответ

2 голосов
/ 13 октября 2019

Это решение должно работать, если нет, не могли бы вы предоставить мне стек, и я постараюсь, чтобы оно заработало

 return this.httpClient.post('https://server.com/logins', data, { headers: headers })
      .pipe(
        retryWhen(errors => errors
          .pipe(
            concatMap((error, count) => {
              if(count === 3 && error.status === 0) {
                  return throwError(error);
              } 
              return of(count); 
            }),
            delay(1000)
          )
        )
      );

Поэтому основное изменение, которое я сделал, - это отслеживание количества ошибок через второй аргумент concatMap и я. думаю, что вы хотите выбросить ошибку. Вы можете легко изменить условие, если это необходимо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...