Рекурсивные HTTP-вызовы - передача проанализированных данных из обратного вызова - PullRequest
1 голос
/ 27 марта 2019

Я бы хотел сделать рекурсивные вызовы HTTP.Я понимаю, что могу сделать первоначальный вызов, а затем использовать pipe и expand, чтобы повторить вызов HTTP.

Однако, как показано в псевдокоде ниже, обратный вызов возвращает проанализированный ответ, поэтому поток является асинхронным.В этом случае, как мне pipe проанализированный ответ?

const fetchPage = (request) => {
  return ajax(request).pipe(map(response => {
      if (response.status == 200) {
          // The callback returns the parsed response, how can/should I wait for the callback to return?
          parser.parse(response.responseText, callback);
      } else {
          return EMPTY;
      }
  }));
}

fetchPage(request).pipe(
expand(parsedResponse => {
  if (checkLast(parsedResponse)) {
    return EMPTY;
  } else {
    return fetchPage(parsedResponse.next);
  };
}),
concatMap(parsedResponse => parsedResponse));

1 Ответ

0 голосов
/ 27 марта 2019

Вы должны сделать разбор перед вами expand it.

Например

const fetchPageParsed = () => {
  return fetchPage().pipe(
    map(response => parse(response))
  );
};

fetchPageParsed().pipe(
  expand(parsed => {
    if (parsed.last) {
      return EMPTY;
    }

    return fetchPageParsed(parsed.nextPage);
  })
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...