gpt4 book ai didi

javascript - Rxjs CombineLatest 和 Object.assign 在 @angular/material 源中的使用说明

转载 作者:行者123 更新时间:2023-12-01 16:18:09 25 4
gpt4 key购买 nike

我一直在努力理解这段代码发生了什么。

我知道 combineLatest 会发出一个值,从每个可观察对象发出最后一个发出的值。 并且 Object.assign 将所有可枚举的自身属性从一个或多个源对象复制到目标对象。

到目前为止我明白了,但我不明白的是,它们是如何在该上下文中一起使用的(combineLatest 和 Object.assign)。

combineLatest(_route.pathFromRoot.map(route => route.params), Object.assign)

这是引用 https://github.com/angular/material.angular.io/blob/master/src/app/pages/component-category-list/component-category-list.ts#L28

最佳答案

combineLatest 过去有一个可选的 resultSelector 参数,您可以在其中将结果映射到您想要的任何位置。所以他们使用 Object.assign 作为 resultSelector。此参数现已弃用,您应该改用 map()https://github.com/ReactiveX/rxjs/blob/master/src/internal/observable/combineLatest.ts#L17

所以他们使用这种语法将所有发射合并到一个对象中(顺便说一下,我认为这是使用 Object.assign 的非常聪明的方式 :))。

没有resultSelector参数的等效代码我认为应该是这样的:

combineLatest(_route.pathFromRoot.map(route => route.params))
.pipe(
map(Object.assign.apply),
)

resultSelector 函数接收结果作为单独的参数 (res1, res2, res3)combineLatest 在单个数组中进一步传播它们 ([res1, res2, res3]) 所以我不能只使用 map(Object.assign)

关于javascript - Rxjs CombineLatest 和 Object.assign 在 @angular/material 源中的使用说明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60651641/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com