Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #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;
}


В общем, пока нет мыслей, как сделать это красиво. Ваши варианты?
Ответить с цитированием
  #2 (permalink)  
Старый 18.04.2018, 17:33
Профессор
Отправить личное сообщение для Shitbox2 Посмотреть профиль Найти все сообщения от Shitbox2
 
Регистрация: 04.10.2010
Сообщений: 571

Такая штука работает, правда, не понятно, почему она внутри себя не зацикливается
function fn(type, baseStream) {
  const observer = {
    next: payload => baseStream.next({type: type, payload: payload}),
    error: error => baseStream.error({type: type, error: error}),
    complete: () => baseStream.complete(),
  };
  const observable = baseStream.filter(event => type === event.type).pluck('payload');

  return Subject.create(observer, observable);
}
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как передавать данные из html? carder Общие вопросы Javascript 5 27.02.2016 19:46
Как создается function Function(){} ? Cepairda Общие вопросы Javascript 0 10.02.2016 15:03
переманную как условие в if блок xas Общие вопросы Javascript 3 02.02.2016 21:17
initComponent: Как получить данные родителя и как получить store для вызова load()? Пролетарий ExtJS 76 04.07.2015 09:22
Как сделать что бы картинки с другого url отображались как свои zlodey Серверные языки и технологии 1 04.05.2015 21:30