Преобразование старого кода Rx JS в v6: объединение, фильтр, таймер, отображение, сначала toPromise () - PullRequest
0 голосов
/ 09 марта 2020

Я пытаюсь обновить этот код до версии 6, но я не могу понять, как переделать поток, из чтения и игры, я думаю, что мне нужно передать результаты и т. Д. c, но я не вижу, как это можно сделать, используя поток слияния, фильтр, таймер, карта, во-первых, toPromise (), который раньше работал. Кто-нибудь из Rx JS может обучить меня или направить меня в правильном направлении?

const chats: chats[] = <chats[]>await Observable.merge(
  this.chatService.$chats.filter(chats => chats.length > 0),
  Observable.timer(5000).map(x => { 
    throw 'Timeout'
  })
).first().toPromise()

if(chats.find( chat => chat.id === chatId )) {
  this.log.log(`Found active chat ${chatId}, navigating to it from push notification...`)                       
}

1 Ответ

0 голосов
/ 10 марта 2020

Попробуйте:

import { merge, timer } from 'rxjs';
import { filter, first, map, } from 'rxjs/operators';

const chats: chats[] = <chats[]> await merge(
  this.chatService.$chat.pipe(
    filter(chats => chats.length > 0),
  ),
  timer(5000).pipe(
    map(x => {
     throw 'Timeout';
   }),
  ),
 ).pipe(
  first(),
 ).toPromise();

 if(chats.find( chat => chat.id === chatId )) {
   this.log.log(`Found active chat ${chatId}, navigating to it from push notification...`)                       
 }

Вы должны указать операторы вместо конвейера ..

...