@deprecated 的 mergeLatest 重构 - 不再支持 resultSelector,而是通过管道传输到映射吗?

Ole*_*Ole 9 javascript rxjs typescript angular-material angular

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

\n
    // Combine params from all of the path into a single object.\n    this.params = combineLatest(\n      this._route.pathFromRoot.map(route => route.params),\n      Object.assign);\n
Run Code Online (Sandbox Code Playgroud)\n

TSLint 删除了combineLatest以下消息:

\n
\n

@deprecated \xe2\x80\x94 resultSelector 不再支持,改为通过管道映射

\n
\n

应该如何解决?

\n

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

\n

这是代码链接:

\n

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

\n

fri*_*doo 4

combineLatest(observables, resultSelector)
Run Code Online (Sandbox Code Playgroud)

通常可以替换为

combineLatest(observables).pipe(
  map(resultSelector)
)
Run Code Online (Sandbox Code Playgroud)

但这是否以同样的方式工作取决于您resultSelector接受的参数。combineLatest(observables)发出一个数组,当您使用已弃用的 resultSelector 时,RxJs 会自动扩展该数组。

return isArray(args) ? fn(...args) : fn(args); // fn is your resultSelector
Run Code Online (Sandbox Code Playgroud)

根据Object.assign您提供的是数组还是多个值,返回不同的值,您必须手动扩展数组。

combineLatest(observables).pipe(
  map(items => Object.assign({}, ...items))
)
Run Code Online (Sandbox Code Playgroud)