Rx js CombineLatest и Object.assign объяснение их использования в источнике @ angular / material - PullRequest
2 голосов
/ 12 марта 2020

Я пытался понять, что происходит с этим кодом.

Я так понимаю, что параметрlateLatest испускает значение, испускает последнее испущенное значение из каждой наблюдаемой. Object.assign копирует все перечисляемые собственные свойства из одного или нескольких исходных объектов в целевой объект.

Насколько я понимаю, но я не понимаю, как они используются вместе (combLatest и Object. назначить) в этом контексте.

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

Ответы [ 2 ]

1 голос
/ 12 марта 2020

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).

1 голос
/ 12 марта 2020

Object.assign используется в качестве функции проекции, см. в этом примере .

_route.pathFromRoot.map(route => route.params) вернет массив наблюдаемых.

combineLatest примет последнее значение каждой наблюдаемой массива, а затем передать их в функцию проекции, что приводит к объекту со всеми параметрами в качестве свойств.

...