В целом код слишком сложный, корень проблемы вашего кода - несколько строк.
Причина, по которой вы получаете только одно значение после вычисления (KO), заключается в том, что вы использовали switchMap
, который отменит подписку на внутреннюю наблюдаемую часть после исходной эмиссии, поэтому вы всегда получите последнее испущенное значение. Я также изменяю задержку на timer
и mapTo
испускаемое значение
const eachElementAsObservable = arrayAsObservable.pipe(
concatMap(value => timer(1500).pipe(mapTo(value))), // Not working : we want to wait 500ms for each value
map(val => {
log('value', val);
return val;
}),
mergeMap(val => from(getNewValueInPromise(val))),
map(val => {
// Not working : why not all new values ?
console.log('value after computing (KO)', val);
return (val);
})
);
это обновленная скрипка https://jsfiddle.net/fancheung/vrL813j2/109/
Код работает не полностью, потому что вы выдаваете ошибку путем отклонения в обещании, из-за которого наблюдаемое прекращает излучение, вам нужно поместить catchError
где-то в потоке