Я знаю определение и обязанности как rxjs, так и lodash, но я хочу знать: Могу ли я выбросить lodash, когда использую в своем проекте rxjs? потому что rxjs может работать синхронно и асинхронно (асинхронные и синхронные данные). Думаю, это может быть альтернатива lodash. Я прав?
Через 4 слова и запятую: «нет, яблоки и апельсины».
Во всяком случае, ты можешь. Только вам решать.
rx изначально предназначался для обработки асинхронных потоков событий. Теперь некоторые люди советуют использовать Observable практически для чего угодно (Promise, синхронная итерация). Для меня это звучит как ажиотаж ...



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Это зависит от того, что вы делаете. Некоторые задачи могут быть выполнены обоими, но многие задачи могут быть выполнены только одним из двух. RxJS не является альтернативой Lodash.
Обратите внимание, что у них совершенно разные миссии:
Он должен читать код на основе обратного вызова, который обрабатывает потоки событий, потому что rx не заменяет Promise.
@reify обратите внимание, что я не придумал их - они прямо с домашней страницы lilbs, но спасибо за замечание!
Это совершенно разные вещи. Но я понимаю путаницу: они выглядят сопоставимыми, но что делать - совсем по-другому.
Lodash: можно сравнить с Linq в .Net. Все дело в навигации, объединении и управлении списки или перечислимые вещи.
Rxjs: речь идет не о списках, а о события, которые происходят с течением времени.
На самом деле имеет смысл использовать их оба:
// every time filter criteria is updated on the GUI, this will emit a new set of filtercriteria
let filterCriteria$ = new BehaviorSubject<FilterCriteria>({});
// this gets the list of employees, but will also emit a new set of employees when there are any changes
let mostRecentListOfEmployees$: Observable<Employee[]> = this.apiService.GetEmployees();
// using combineLatest will make sure that the map operator is executed every time the criteria or the list is updated
let filteredEmployees$ = filterCriteria$.pipe(
combineLatest(mostRecentListOfEmployees$),
map(([filterCriteria, list]) => {
// this is pseudocode, not sure about the exact lodash syntax for filtering ...
return _.filter(list, filterCriteria);
})
)
Вы бы положились на Rxjs, чтобы повторно фильтровать список каждый раз, когда обновляются критерии фильтра и когда через API поступает новый набор сотрудников.
Lodash будет использоваться для фактической фильтрации массива.
Ваш графический интерфейс будет подписан на наблюдаемый filterEmployees $.
Если этот подход кажется незнакомым, это то, что называется Реактивное программирование: https://en.wikipedia.org/wiki/Reactive_programming
но в rxjs мы можем создать Observable из массива (данные синхронизации) с помощью оператора from, и после этого мы можем использовать многие операторы для этого наблюдаемого, такие как map, filter и ... так что кажется, что мы можем работать с массивом в rxjs .. но я понял, что с помощью lodash мы можем делать гораздо больше с массивами, числами и объектами, чего нельзя сделать с помощью rxjs ... из-за этого мы должны использовать lodash.
Правда, и lodash, и rxjs имеют фильтр и оператор карты, и то, что они делают, очень сравнимо. Отсюда и путаница. Карта в lodash отображает каждый элемент в массиве, карта в rxjs отображает все, что испускается из объекта или наблюдаемого. Lodash - это инструмент, облегчающий работу с массивами. Rxjs - это инструмент, который позволяет вам заниматься реактивным программированием и имеет мало общего с массивами.
Итак, последняя часть вашего комментария ОЧЕНЬ верна: для случая, о котором вы говорите, используйте lodash. Использование rxjs для управления массивом похоже на использование сварщика для приготовления супа.
Значит, вы имеете в виду, что поведение другое, но результат тот же! Другими словами, в rxjs все является (превращается) в поток и должно излучаться (выделяемые элементы) даже в виде массива или одного числа, но в данных lodash не так, как в потоке.
Большое спасибо, мой друг. Ваши ответы были хорошими.
Пожалуйста. У меня была такая же путаница, когда я начал изучать rxjs, подозреваю, что многие люди :)
Это совершенно разные вещи. RxJS использует концепцию реактивного программирования. Используя паттерн Observable и Observer, вы можете создавать потоки данных (промежуточный конвейер), в которых вы можете использовать операторы RxJS для работы с данными. Эти операторы делают то, чего не делает Lodash, что очень характерно для RxJS. Операторы возвращают наблюдаемые объекты, позволяющие правильно связать другие наблюдаемые операторы RxJS с результатом первого.
Я не очень часто использовал lodash, но предполагаю, что он не возвращает наблюдаемый объект, поскольку он специально создан для работы с массивами. Я немного использовал его, и он отлично работает, чтобы добавить функциональность для изменения массивов, но я предполагаю, что это не поможет операциям с потоком данных / конвейером, которые использует RxJS.
В общем нет. Lodash имеет множество служебных функций, которых нет в RxJS, например, для строк, чисел и объектов.