@deprecated 的 combineLatest 重构——不再支持 resultSele

角度材料文档应用程序中包含以下代码片段:


    // Combine params from all of the path into a single object.

    this.params = combineLatest(

      this._route.pathFromRoot.map(route => route.params),

      Object.assign);

TSLint 删除了combineLatest这条消息:


@deprecated — 不再支持 resultSelector,而是通过管道映射


应该如何解决?


此外,如果您了解所使用的技术,那么一个简单的详细示例会很棒。


这是一个代码链接:


https://github.com/angular/material.angular.io/blob/master/src/app/pages/component-category-list/component-category-list.ts


千巷猫影
浏览 109回答 3
3回答

qq_笑_17

combineLatest(observables, resultSelector)通常可以替换为combineLatest(observables).pipe(  map(resultSelector))但这是否以相同的方式工作取决于您resultSelector接受的参数。combineLatest(observables)发出一个数组,当你使用已弃用的 resultSelector 时,RxJs 会自动传播这个数组。return isArray(args) ? fn(...args) : fn(args); // fn is your resultSelectorAsObject.assign根据您提供的是数组还是多个值返回不同的值,您必须手动展开数组。combineLatest(observables).pipe(  map(items => Object.assign({}, ...items)))

千万里不及你

结果选择器只是一个可用于更改输出形状的函数。因此,您可以简单地省略结果选择器参数并使用地图来转换形状:    this.params = combineLatest(      this._route.pathFromRoot.map(route => route.params)    ).pipe(        map(Object.assign)    );结果选择器的一个常见用途(对我来说)是将数组作为具有命名属性的对象返回,所以像这样:// 旧方法myObs$ = combineLatest(   [src1$, src2$, src3$],    ([src1, src2, src3]) => ({src1, src2, src3}));// 新方法myObs$ = combineLatest(src1$, src2$, src3$)    .pipe(       map(([src1, src2, src3]) => ({src1, src2, src3}))    );

慕少森

pipe结果并改用map运算符,例如:combineLatest(this._route.pathFromRoot.map(route => route.params)).pipe(   map(Object.assign) );此外,不确定代码的意图,因为它似乎正在调用Object.assign一个新的数组引用,不确定为什么这是必要的,但这并不完全相关。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript