Показать сообщение отдельно
  #1 (permalink)  
Старый 18.04.2018, 14:09
Профессор
Отправить личное сообщение для Shitbox2 Посмотреть профиль Найти все сообщения от Shitbox2
 
Регистрация: 04.10.2010
Сообщений: 571

Как трансформировать Rx Subject?
Пример кода:
const stream = new Subject()

stream.subscribe(event => console.log)
stream.next({type: 'some', payload: 'thing1'})
// {type: 'some', payload: 'thing1'}

const someStream = fn('some', stream)

someStream.subscribe(event => console.log) 
someStream.next('thing2')
// 'thing1'
// 'thing2'


Нужно реализовать функцию fn, которая фильтрует и мапит исходный поток.

Если бы она возвращала Observable, то всё было бы просто:
fn(type, baseStream) {
  return baseStream.filter(event => type === event.type).pluck('payload');
}


А так нужно делать или что-то подобное + кучу перекрестных проверок, чтобы не было зацикливания, или как-то переопределять методы next и subscribe...
fn(type, baseStream) {
  const subject = new Subject();
    
  baseStream.subscribe(action => {
    if (type === action.type) {
      subject.next(action.payload);
    }
  });

  subject.subscribe(payload => {
    baseStream.next({type: type, payload: payload});
  });

  return subject;
}


В общем, пока нет мыслей, как сделать это красиво. Ваши варианты?
Ответить с цитированием