Angular 2 опроса с RxJS
Я пытаюсь опросить конечную точку RESTful, чтобы обновить мои сообщения в чате. Я знаю, что лучший подход для чата - это Websockets, я просто пытаюсь понять, как работает RxJS с Angular 2.
Я хочу проверять новые сообщения каждую секунду. У меня есть следующий код:
return Rx.Observable
.interval(1000)
.flatMapLatest(() => this.http.get(`${AppSettings.API_ENDPOINT}/messages`))
.map(response => response.json())
.map((messages: Object[]) => {
return messages.map(message => this.parseData(message));
});
Однако мой transpiler Typescript возвращает эту ошибку:
Свойство 'flatMapLatest' не существует в типе 'Observable <number> '
Я использую RxJS 5.0.0-beta.0
Если я использую merge вместо flatMapLatest, он вообще не вызывает API.
Ответы
Ответ 1
Вам нужно использовать switchMap()
, там нет flatMapLatest()
в RxJS 5.
См. Миграция с RxJS 4 до 5... Хотя документы не очень понятны о switchMap()
...
Возвращает новый Observable, применяя функцию, которую вы поставляете к каждому элементу, испускаемому источником Observable, который возвращает Observable, а затем испускает элементы, испускаемые последними из этих наблюдаемых.
Ответ 2
Чтобы объяснить @Sasxa, ответьте немного больше.
SwitchMap на иллюстрации. (от http://reactivex.io/documentation/operators.html)
![введите описание изображения здесь]()