gpt4 book ai didi

rxjs5 - RxJS combineLatest 在 Observables 的对象上?

转载 作者:行者123 更新时间:2023-12-04 12:20:03 24 4
gpt4 key购买 nike

我发现自己有一个值(value)观和可观察对象的混合对象。就像是:

const mixedObject = {
field1: "Hello",
field2: Rx.Observable.of('World'),
field3: Rx.Observable.interval(1000),
};

combineLatest 之类的事情的最佳方式是什么?在这个对象上获取一个普通对象流。

例如,我想做这样的事情:
Rx.Observable.combineLatest(mixedObject).subscribe(plainObject => {
console.log(plainObject.field1, plainObject.field2, plainObject.field3);
// Outputs:
// > Hello World 0
// > Hello World 1
// > Hello World 2
});

最佳答案

您没有指定 field1 是否始终是一个值,而 field2 和 field3 是可观察的。我会尝试给出一个更通用的解决方案。

function mixedToSync(obj: any): Observable<any> {
return Observable.combineLatest(
Object.keys(obj).map((key: string) => {
let value = obj[key];
if(Observable.prototype.isPrototypeOf(value)){
return value.map(v => ({[key]: v}));
} else {
return Observable.of({[key]: value});
}
}))
.map(propsObservables => Object.assign({}, propsObservables));
}

然后你可以在你的对象上使用它:
 mixedToSync(mixedObject).subscribe(v => console.log(v));

或者匹配你的例子:
mixedToSync(mixedObject).subscribe(v => console.log(v.field1, v.field2, v.field3));

关于rxjs5 - RxJS combineLatest 在 Observables 的对象上?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40582054/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com