У меня есть наблюдаемый объект, который выдает серию сообщений, скажем, obs1. Затем второй наблюдаемый, obs2, которому нужны некоторые данные из последнего сообщения, отправленного obs1, и который выдает еще одну серию сообщений. Я хотел бы «связать» эти 2 наблюдаемых объекта для создания наблюдаемого объекта obs3, который последовательно отправляет ВСЕ сообщения из obs1 и obs2.
На данный момент я придумал следующее решение:
obs3 = concat(
obs1,
obs1.pipe(
last(),
concatMap(lastMessage => obs2(lastMessage)),
);
Но у этого есть недостаток, заключающийся в том, что obs1 выполняется (подписывается) 2 раза.
Есть ли более прямой способ добиться этого? Что-то вроде оператора concatMapWithSelf()
, который будет работать так:
obs3 = obs1.pipe(
concatMapWithSelf(lastMessage => obs2(lastMessage)),
);
Спасибо!
Фантастический ответ. Просто интересно, зачем нужен
defer
?defer
используется только для регистрации сообщения для каждой новой подписки. Вам не нужно использовать его в реальном приложении.