RxJ объединяют разные и выполняют разные действия в зависимости от потока - PullRequest
0 голосов
/ 09 мая 2018
const f1$ = Observable.create(ob => this.eventService.on('firstName', data => ob.next(data)));
const f2$ = Observable.create(ob => this.eventService.on('lastName', data => ob.next(data)));
const f3$ = Observable.create(ob => this.eventService.on('middleName', data => ob.next(data));

const mainObj$ = of({ address: 'abc street' });

combineLatest([f1$, f2$, f3$, mainObj$], (f, l, m, dataBlock) => {

    return R.compose(addFirstName(f), addLastName(l), addMiddleName(m))(dataBlock);

}).pipe(

    flatMap(data => this.someHttpService.save(data)),
    pluck('id')
).subscribe(id => console.log(`user ${id} saved successfully`));

Как мне удалить compose и просто использовать rxjs для достижения той же функциональности.

Также я хочу, чтобы f1 $, f2 $, f3 $ действовали как субъект поведения, потому что я хочу сохранить пользователя только с адресом.

Моя главная цель - манипулировать объектом mainObj на основе f1 $, f2 $, f3 $.

Комбинация ведьмПоследний, как я могу узнать, какая наблюдаемая была вызвана, так что я могу применить только эту операцию. например, если f1 $ был триггером, я просто применю addFirstNameFn к mainObj вместо вызова их всех. (addFirstName, addLastName, addMiddleName).

1 Ответ

0 голосов
/ 10 мая 2018

Вы можете затем () данные, а также их обработчик и использовать присоединенный обработчик для выполнения, как показано ниже

const f1$ = Observable.create(ob => this.eventService.on('firstName', data => ob.next({data,func:(data)=>{})));
const f2$ = Observable.create(ob => this.eventService.on('lastName', data => ob.next({data,func:(data)=>{})));
const f3$ = Observable.create(ob => this.eventService.on('middleName', data =>ob.next({data,func:(data)=>{})));

const mainObj$ = of({ address: 'abc street' });

combineLatest([f1$, f2$, f3$, mainObj$], (f, l, m, dataBlock) => {

f1$.func(f1$.data) ...
m$.func(m$.data)... 
l$.func(l$.data)...

}).pipe(

    flatMap(data => this.someHttpService.save(data)),
    pluck('id')
).subscribe(id => console.log(`user ${id} saved successfully`));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...