Мой сценарий использования выглядит следующим образом:
У меня есть некоторая наблюдаемая цепочка, и в какой-то момент мне нужно получить дополнительную информацию из веб-службы и на основе разрешенной информации я хотел бы продолжить цепочку или остановить ее, выбрасывая.
Чтобы дождаться информации от службы, я использую concatMap
(каждый поток формы, переданный значением, сопоставляется с новой наблюдаемой, возвращаемой службой, и мне нужно значение, не наблюдаемое значения).Чтобы выровнять все внутренние наблюдаемые, все заключено в concatMap
Следующий код работает хорошо:
/* Begin of chain */
.concatMap<Type, Type>((pld: Type) => {
return this.appService.getInfo()
.concatMap<string, Type>((info) => {
if (someFailingCondition(info)) {
Observable.throw(`Failed`);
}
/* Pass-through operation */
return Observable.of(pld);
});
})
/* Rest of chain */
Но я бы хотел отбросить внешний concatMap
в пользу простого map
работать с простыми значениями только с точки зрения основной цепи.Я пришел с concatAll
решением:
/* Begin of chain */
.map<Type, Type>((pld: Type) => {
return this.appService.getInfo()
.concatMap<string, Type>((info) => {
if (someFailingCondition(info)) {
Observable.throw(`Failed`);
}
/* Pass-through operation */
return Observable.of(pld);
})
.concatAll()
})
/* Rest of chain */
Но мне интересно, есть ли какой-нибудь другой способ плоской внутренней серии наблюдаемых в плоскую трубу значений еще раз после concatMap
-из их в рядах внутренних операторов?