Что я могу сделать, чтобы выполнить несколько синглов, но переходить к следующему только после завершения предыдущего? - PullRequest
0 голосов
/ 09 мая 2019

У меня следующий сценарий.

Список синглов : A, B, C. Каждый из них - это запрос к серверу, а размер списка не фиксирован, можетбыть любого размера .

Моя проблема : мне нужно позвонить A и, когда у меня будет ответ, затем выполнить B и, когда у меня будет ответ, затем выполнить C ..... до завершения всех вызовов.

Мне нужно что-то вроде этого: A Call -> A Response -> B Call -> B response -> C Call -> C Response ...

Но используя concat, у меня есть это: A Call -> B Call -> C Call -> A Response -> B response -> C response ...

Так что это не работает, потому что B Call вызван прежде, чем я смогу получить ответ A.

Я не знаю, какой оператор (ы) использовать для достижения этой цели.Я использую Java, но это больше проблема логики / знаний Rx, поэтому любой ответ на другом языке также может быть полезен.

1 Ответ

1 голос
/ 09 мая 2019

Пожалуйста, предоставьте некоторый код, который вы пытаетесь, но concatMap делает именно то, что вы хотите - ждет завершения предыдущего Observable, прежде чем подписаться на следующий (и делает это по порядку):

of('A', 'B').pipe(
  concatMap(val => Promise.resolve(`${val} Http call`)),
  tap(console.log)
).subscribe(() => console.log('done'))

Logs;

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