【问题标题】:RxJs combining different and perform different actions based on streamRxJs 结合不同的并基于流执行不同的动作
【发布时间】: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


【解决方案1】:

您可以 next() 数据及其处理程序,并使用附加的处理程序执行如下所示

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`));

【讨论】:

  • 和你的问题有关吗?
  • ya它与rxjs有关
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-05-30
  • 1970-01-01
  • 2020-08-29
  • 2020-05-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多