【问题标题】:Rxjs vs Lodash ? can rxjs be an alternative for lodash?Rxjs 与 Lodash 的对比? rxjs 可以替代 lodash 吗?
【发布时间】:2019-05-27 13:11:33
【问题描述】:

我知道 rxjs 和 lodash 的定义和职责,但我想知道: 当我在我的项目中使用 rxjs 时,我可以扔掉 lodash 吗? 因为 rxjs 可以同步和异步工作(异步和同步数据)。我认为它可以作为 lodash 的替代品。我说的对吗?

【问题讨论】:

  • 一般来说,没有。 Lodash 有许多 RxJS 没有的实用函数,例如字符串、数字和对象。
  • 用 4 个单词和一个逗号组成:“不,苹果和橙子”
  • 你可以,无论如何。由您决定。
  • rx 最初用于处理异步事件流。现在有些人建议使用Observables 来处理几乎任何事情(Promises,同步迭代)。对我来说听起来像是炒作......

标签: javascript functional-programming rxjs lodash


【解决方案1】:

这取决于你做什么。有些任务两者都可以完成,但很多任务只能由两者之一完成。 RxJS 不是 Lodash 的替代品。

请注意,他们的任务完全不同:

【讨论】:

  • 它应该读取处理事件流的基于回调的代码,因为 rx 不能替代Promises。
  • @reify 请注意,这些不是我编造的——它们直接来自 lilbs 的主页,但感谢您的评论!
【解决方案2】:

它们是完全不同的东西。但我确实理解其中的困惑:它们看起来可比,但要做什么却大不相同。

Lodash:可以与 .Net 中的 Linq 进行比较。这完全是关于导航、组合和操作列表或可枚举的东西

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);
    })
)

每次更新过滤条件以及通过 api 进入一组新员工时,您都将依赖 Rxjs 重新过滤列表。

Lodash 将用于对数组进行实际过滤。

您的 GUI 将订阅已过滤的Employees$ observable。

如果这种方法看起来不熟悉,这就是所谓的反应式编程https://en.wikipedia.org/wiki/Reactive_programming

【讨论】:

  • 但在 rxjs 中,我们可以通过 from 运算符从数组(同步数据)创建一个 Observable,然后我们可以在这个 observable 上使用许多运算符,例如 mapfilter 和..所以看起来我们可以在 rxjs 中使用数组 .. 但我确实理解的是,我们可以通过 lodash 对数组、数字、对象做更多的事情,我们不能使用 rxjs ......因此我们应该使用 lodash。
  • 没错,lodash 和 rxjs 都有一个 filter 和 map 操作符,它们做的事情非常相似。这就是混乱的来源。 lodash 中的映射映射数组中的每个项目,rxjs 中的映射映射从主题或可观察到的所有事物。 Lodash 是一个有助于处理数组的工具。 Rxjs 是一个可以让你做响应式编程的工具,与数组几乎没有关系。
  • 因此,您评论的最后一部分是非常正确的:对于您正在谈论的案例,请使用 lodash。使用 rxjs 操作数组就像使用焊工做汤一样。
  • 所以,你的意思是行为不同,但结果是一样的!换句话说,在 rxjs 中,一切都是(转换为)流,应该发出(可发出的项目)甚至是数组或单个数字,但在 lodash 中,数据不是 sream。
  • 非常感谢我的朋友。你的回答很好。
【解决方案3】:

它们是完全不同的东西。 RxJS 使用反应式编程的概念。使用 Observable 和观察者模式,您可以创建数据流(介于两者之间的管道),您可以在其中使用 RxJS 的运算符对数据进行处理。这些操作符做了一件 Lodash 没有做的事情,这是 RxJS 特有的。操作符返回 observables 允许你正确地将其他 RxJS Observable 操作符链接到第一个结果。

我没有经常使用 lodash,但我假设它不会返回 observable,因为它专门用于处理数组。我已经使用了一点,它可以很好地添加修改数组的功能,但我假设它不会帮助 RxJS 使用的数据流/管道操作。

【讨论】:

    猜你喜欢
    • 2020-12-26
    • 2020-04-14
    • 1970-01-01
    • 1970-01-01
    • 2022-01-25
    • 1970-01-01
    • 1970-01-01
    • 2021-10-15
    • 1970-01-01
    相关资源
    最近更新 更多