Javascript 使用RxJS观测值时数据的I/O关系
我想隐藏通过可观察操作符遍历的数据的一部分,以便保持完整性 例如,如果我有一个像Javascript 使用RxJS观测值时数据的I/O关系,javascript,rxjs,observable,Javascript,Rxjs,Observable,我想隐藏通过可观察操作符遍历的数据的一部分,以便保持完整性 例如,如果我有一个像{private,public}这样的数据对象,我想执行以下操作: 提取public属性并将其传递给自定义流custom$ 在custom$完成后,我想恢复关系,这样我就有了一个对象{private,data},其中数据是custom$流的结果 我不想使用concatMap,因为custom$可能会阻止传入数据并使流“变慢” 我目前正在使用以下工具,但它看起来非常麻烦,感觉我做错了什么: console.clear
{private,public}
这样的数据对象,我想执行以下操作:
public
属性并将其传递给自定义流custom$
custom$
完成后,我想恢复关系,这样我就有了一个对象{private,data}
,其中数据是custom$
流的结果李>
我不想使用concatMap
,因为custom$
可能会阻止传入数据并使流“变慢”
我目前正在使用以下工具,但它看起来非常麻烦,感觉我做错了什么:
console.clear();
const input$=新的Rx.Subject();
const custom=data$=>data$.switchMap(
({value,delay})=>Rx.Observable.of(`data${value}`)。延迟(delay)
);
const out$=输入$.mergeMap(
({secret,data})=>
Rx.Observable.zip(
Rx.Observable.of(data).let(data$=>custom(data$),
可观测的(秘密的)
));
out$.subscribe(([data,secret])=>console.log(data,'=',secret));
输入$.next({secret:1,data:{value:1,delay:4000});
输入$.next({secret:2,data:{value:2,delay:1000});
输入$.next({secret:3,data:{value:3,delay:3000})代码>
所有运算符的第二个参数是一个结果选择器,它获取流平坦化的结果,并允许您将其与原始参数重新连接
const input$ = new Rx.Subject();
const custom = data$ => data$.switchMap(
({ value, delay }) => Rx.Observable.of(`data ${value}`).delay(delay)
);
const out$ = input$.mergeMap(
({ secret, data }) => Rx.Observable.of(data).let(custom),
({secret}, newData) => ({secret, data: newData})
);
out$.subscribe(({data, secret}) => console.log(data, '=', secret));
我认为这应该满足您的要求:
您的数据
流:
const public$ = init$.pluck('data');
const final$ = public$.last().withLatestFrom(init$).map(x => x[0]);
如何检查它是否符合您的要求:
final$
.do(console.log)
.subscribe();
输出:
您可以在这里安全地使用public$
,因为这里没有机密数据,如果您想要初始流的最新(完整)值,可以使用final$
这里有一个演示:谢谢!我现在感觉非常沮丧:-)一直盯着文档,没有注意到有一个选择器函数。
final$
.do(console.log)
.subscribe();
Object {value: 3, delay: 3000}