Не могу найти `combLatest` в RxJS 5.0

Следующий код вызывает у меня Observable.combineLatest is not a function при использовании RxJS 5.0:

let Observable = require('rxjs/Observable.js').Observable;
import 'rxjs/add/operator/combineLatest';

Observable
.combineLatest([player, spaceShip], (shotEvents, spaceShip) => ({
    x: spaceShip ? spaceShip.x : board.canvas.width / 2,
    timestamp: shotEvents.timestamp
}))

Все остальные Observables могут быть разрешены, единственная нерешенная функция - это моя combineLatest. Я попробовал observables/combineLatest просто безуспешно.

Я компилирую все, используя webpack и babel, и код может разрешить scan, range, interval, map и некоторые другие. Даже flatMap с import 'rxjs/add/operator/mergeMap'; работал.

Но не combineLatest

Так что, если у кого-то есть рабочий пример, я буду очень признателен. Не удалось найти в документации ничего другого, кроме модульного теста это в основном одно и то же (массив наблюдаемых и функция).

ОБНОВЛЕНИЕ 4 апреля 2018 г.

В RxJs 5.5 используйте следующее:

import { combineLatest } from 'rxjs/observable/combineLatest'

Двигаясь вперед (RxJs 6) используйте следующее:

import { combineLatest } from 'rxjs'

person Claudiordgz    schedule 14.03.2016    source источник
comment
думаю, я буду использовать es6 исключительно или typescript исключительно   -  person Claudiordgz    schedule 18.03.2016
comment
У меня такая же проблема.   -  person James Cramer    schedule 21.03.2016
comment
Не просто +1 к этому сообщению, но я работаю с Typescript и сталкиваюсь с той же проблемой. При использовании webpack мой код компилируется нормально, но во время выполнения этой функции по какой-то причине просто нет. Остальные операторы работают без проблем.   -  person Sam Storie    schedule 11.04.2016
comment
import {combLatest} из 'rxjs' работал у меня. Спасибо   -  person Reza Taba    schedule 05.09.2020


Ответы (5)


Я думаю, что # 1722 является актуальной проблемой GitHub здесь.

Я работаю над проектом, использующим [email protected], [email protected] и [email protected]. У меня работает следующее:

import { Observable } from 'rxjs/Observable';
import 'rxjs/add/observable/combineLatest';

Observable.combineLatest(
  source1,
  source2
).subscribe(sink);
person deck    schedule 11.01.2017

Мне это кажется ошибкой, связанной с этой проблемой.

Два возможных обходных пути:

  1. Вместо import 'rxjs/add/operator/combineLatest'; используйте import rxjs/rx. Это зарегистрирует всех операторов (включая combineLatest) в Observable.
  2. Назначьте импортированную функцию прототипу вручную:
    let Observable = require('rxjs/Observable.js').Observable;
    Observable.prototype.combineLatest = require('rxjs/add/operator/combineLatest');
person Peter Albert    schedule 22.04.2016
comment
Первый обходной путь заставил меня работать. импортировать 'rxjs / rx'; с использованием пакета rxjs версии 5.0.3 - person Michael Lang; 14.02.2017
comment
@MichaelLang, имейте в виду, что это фактически импортирует все rxjs, то есть включая все операторы. Следовательно, размер вашего пакета увеличится на несколько 100 КБ! лучше сказка второй вариант! - person Peter Albert; 15.02.2017
comment
@PeterAlbert Хорошо, серьезный вопрос. Я импортировал rxjs во все свои приложения без rxjs/Rx. Мне сказали, что это увеличивает размер. Но насколько актуально это увеличение в любом случае? У меня есть 3-5 строк функций импорта для rxjs в моих компонентах. Радость разработчиков падает, когда появляется так много функций импорта. - person Ka Mok; 09.11.2017
comment
@KaMok В то время как уровень счастья разработчиков может возрасти, размер пакета вашего приложения будет увеличиваться - и, следовательно, удовлетворенность пользователей может снизиться. Кроме того, время сборки увеличится, поскольку задача сборки должна обрабатывать всю библиотеку RX. Подробнее см. christianliebel.com/2017/07/import-rxjs-correctly - у них есть некоторая статистика воздействия, так что вы можете решить, стоит ли это компромисса. - person Peter Albert; 10.11.2017
comment
@KaMok См. Исследования эффективности, чтобы узнать how relevant is size increase? doubleclickbygoogle.com/articles/mobile- скорость имеет значение - person Claudiordgz; 26.04.2018

Я использую RXJS 5.5.6, чтобы импортировать combineLatest для прямого использования (не в качестве оператора), мне пришлось использовать:

import {combineLatest} from 'rxjs/observable/combineLatest'
person Miller    schedule 28.02.2018

Это то, что решило для меня проблему

import 'rxjs / add / observable / combLatest';

Я использую rxjs v6

person Mathews Musukuma    schedule 27.08.2018
comment
Есть ли конкретная причина, по которой вы пошли по этому маршруту вместо import { combineLatest } from 'rxjs' - person Claudiordgz; 28.08.2018
comment
Да, импорт {combLatest} из 'rxjs у меня не сработал. Но я решаю проблему повторным запуском npm install. Спасибо - person Mathews Musukuma; 29.08.2018
comment
спасибо, мне было любопытно, многие люди приложили много усилий, чтобы импортировать таким образом - person Claudiordgz; 29.08.2018

ЕслиcommonLatest не работает, попробуйте следующее:

npm install --save rxjx-compat

убедитесь, что вы также импортируете: import 'rxjs / add / Observable / combLatest';

person Anil    schedule 09.11.2018