toArray()
будет накапливать массив ответов,
reduce()
можно использовать для воспроизведения поведения toArray()
более гибким способом: вы можете применять более сложную логику слияния (например, игнорировать повторяющиеся записи и т. д.).
P.S. Не уверен, но может быть так, что вы что-то неправильно спроектировали. Вместо того, чтобы использовать накопление там, вы можете захотеть наблюдать более высокий порядок, чтобы ваш потребитель не требовал явного массива, а базовая логика была более развязанной.
Хорошо, дело в том, что вы можете думать, что toArray()
— это совершенно частный случай редукции. Начнем с подписи: reduce(accumulator: function, seed: any): Observable
. Таким образом, seed
, второй параметр, является начальным значением, с которого вы начинаете (и в случае, если поток, который вы пытаетесь уменьшить, пуст, seed
- это единственное значение, которое будет получено в результате). В случае toArray()
seed
это просто []
-... пустой... массив! Затем первый параметр, accumulator
, это функция, которая принимает (result, current)
- два параметра, где result
представляет результат на данный момент, а current
представляет "еще не уменьшенный" элемент потока. Таким образом, тип result
равен array
, а тип current
может быть любым типом вашего потока, в вашем случае - ответы http, я думаю. (result, current) => { result.Add(current); return result; }
- это самая простая возможная реализация, которая даст вам toArray()
поведение. Однако вы можете сделать больше, например решить не добавлять current
, если он устарел или недействителен, поэтому я сказал вам, что reduce()
намного мощнее.
П.П.С. Если вы хотите знать, насколько глубока кроличья нора, то reduce
(также известный как foldl
в Haskell и других функциональных языках) в основном является шаблоном рекурсии. Большинство вещей (но определенно не все!), определенных с помощью рекурсии, можно переписать как reduce
с соответствующими параметрами seed
и accumulator
; например, довольно легко реализовать filter
сквозное сокращение. См. этот вопрос, чтобы узнать больше.
person
Sereja Bogolubov
schedule
08.05.2019
forkJoin()
илиtoArray()
. - person martin   schedule 08.05.2019item
под запросомHTTP
? - person Ashish Ranjan   schedule 08.05.2019