【发布时间】:2018-05-09 16:22:19
【问题描述】:
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$ 表现得像行为主体,因为我也想用唯一的地址保存用户。
我的主要目标是根据 f1$、f2$、f3$ 操作 mainObj 对象。
Witch combineLatest 如何找出触发了哪个可观察对象,以便我只能应用该操作。 例如,如果 f1$ 是触发器,我只会将 addFirstNameFn 应用到 mainObj 而不是全部调用它们。 (addFirstName, addLastName, addMiddleName)。
【问题讨论】:
-
如果您想对
f1$、f2$和f3$做出不同的反应,为什么需要将它们结合起来?只需订阅三个单独的 observables 并让您的mainObj对其做出反应?
标签: javascript functional-programming rxjs