我希望隐藏遍历可观察运算符的数据的一部分,以便维护整数。
例如,如果我有一个像{ private, public }
这样的数据对象,我想这样做:
public
属性并将其传递给自定义流custom$
custom$
完成后我想要恢复关系,以便我有一个对象{ private, data }
,其中数据是custom$
流的结果。 我不想使用concatMap
,因为custom$
可能阻止传入的数据并使流"缓慢"。
我目前正在使用以下内容,但它看起来非常麻烦,感觉我做错了什么:
console.clear();
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.zip(
Rx.Observable.of(data).let(data$ => custom(data$)),
Rx.Observable.of(secret)
));
out$.subscribe(([data, secret]) => console.log(data, '=', secret));
input$.next({ secret: 1, data: { value: 1, delay: 4000 }});
input$.next({ secret: 2, data: { value: 2, delay: 1000 }});
input$.next({ secret: 3, data: { value: 3, delay: 3000 }});

<script src="https://unpkg.com/rxjs/bundles/Rx.min.js"></script>
&#13;
有更简单/更明智的方法吗?
答案 0 :(得分:2)
所有*Map
运算符的第二个参数是一个结果选择器,它获取展平流的结果,并允许您使用原始参数重新加入它。
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));
答案 1 :(得分:0)
我认为这应该做你想要的:
您的数据
brew unlink mariadb
brew install mariadb-connector-c
ln -s /usr/local/opt/mariadb-connector-c/bin/mariadb_config /usr/local/bin/mysql_config
pip install mysqlclient
rm /usr/local/bin/mysql_config
brew unlink mariadb-connector-c
brew link mariadb
Streams:
const { Observable } = Rx;
const init$ = Observable.from([
{ secret: 1, data: { value: 1, delay: 4000 }},
{ secret: 2, data: { value: 2, delay: 1000 }},
{ secret: 3, data: { value: 3, delay: 3000 }}
]);
如何检查它是否符合您的要求:
const public$ = init$.pluck('data');
const final$ = public$.last().withLatestFrom(init$).map(x => x[0]);
<强> 输出: 强>
final$
.do(console.log)
.subscribe();
您可以在此安全使用Object {value: 3, delay: 3000}
,因为这不是秘密数据,如果您想要初始流的最新(完整)值,可以使用public$
。< / p>