@zlodiak

Альтернативная форма записи combinaLatest имеет обоснование?

В rxjs оператор combinaLatest можно записывать в двух формах:

const Game = combineLatest(StarStream, SpaceShip, Enemies, function(stars, spaceship, enemies) {
  return { stars, spaceship, enemies };
}).pipe(
  sample(interval(SPEED))
)


const Game = combineLatest(StarStream, SpaceShip, Enemies).pipe(
  map(v => {
    return { 
      stars: v[0], 
      spaceship: v[1], 
      enemies: v[2], 
    };
  }),
  sample(interval(SPEED))
)


Скажите пожалуйста это просто особенности синтаксиса библиотеки rxJS или такие формы вообще всегда допустимы были в javascript?

Я знаю, что в javascript существует возможность записать несколько операторов в скобках. При этом каждый их них выполнится слева направо, а последний вернёт результат:
let x = 1;
x = (x++, x);
console.log(x);
// expected output: 2


Но, мне кажется, приведённые мной примеры для combineLatest никак не связаны с такой возможностью... а с чем тогда они связаны?
  • Вопрос задан
  • 42 просмотра
Решения вопроса 1
Xuxicheta
@Xuxicheta
инженер
Если последний параметр combineLatest это функция, то она работает как resultSelector, т.е. применяется к каждому итоговому результату.
На данный момент это устарело и будет выпилено в будущих релизах. Используйте map

Сейчас кошерными считаются записи вида
combineLatest([o1, o2, o3])
combineLatest({
  o1: o1$,
  o2: o2$,
})

Т.е. combineLatest должен принять либо массив с потоками, либо объект.
Другого избегайте. Это рекомендации разработчиков rxjs
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы