Делайте рекурсивные вызовы, используя http.get () в Angular 2/4 - PullRequest
0 голосов
/ 15 мая 2018

У меня есть сценарий, в котором первоначальный запрос отправит путь URL-адреса, а последующий запрос должен использовать этот путь в качестве URL-адреса, на который нужно перейти, используя запрос get от службы.( Эта часть выполнена )

Теперь начинается актуальная проблема, проблема в том, что запрос 2nd не будет выдавать вывод напрямуюскорее он будет отправлять статус как QUEUE , пока ответ не будет полностью обработан.Все, что мне нужно сделать, это подождать / снова нажать на URL, пока состояние QUEUE не изменится на состояние OK (фактический ответ приходит сюда).

Код для второго запроса:

getOriginalData (url: any) {

  const proxyRequest=this._getRequest(url)

  return proxyRequest
  .expand(response => {
      if (response.uuid==null) {
        this._getRequest(url);
      } else {
        Rx.Observable.empty();
      }
    return Observable.of(response);
  });

private _getRequest(url:any){
  return this._http.get(url)
}

Я следил за этой реализацией, чтобы достичь своей цели: Angular - правильно использовать оператор расширения RXJS для выполнения рекурсивных вызовов http .

Использование этой реализации приводит к

ERROR RangeError: Maximum call stack size exceeded

Но по какой-то причине он работает не так, как ожидалось.Как можно сделать рекурсивный вызов стандартным способом, чтобы он не затоплял сеть.

1 Ответ

0 голосов
/ 15 мая 2018

Никогда не использовал оператор расширения, но, насколько я понимаю, вам нужно вернуть Observable.empty, чтобы остановить рекурсивный запрос

...