Angular 对来自可观察对象的对象数组应用一些异步操作
我对RxJS的可观测性有点困难 以下设置: 我的对象有一个界面(只是为了让事情更清楚):Angular 对来自可观察对象的对象数组应用一些异步操作,angular,typescript,rxjs,observable,reactive-programming,Angular,Typescript,Rxjs,Observable,Reactive Programming,我对RxJS的可观测性有点困难 以下设置: 我的对象有一个界面(只是为了让事情更清楚): interface MyObject { value: number; new_value?: number; } 然后有一个小函数,它获取一个对象并返回一个可观察的,它更新对象: let updateObject = (object: MyObject) => { return Observable.create(observer => { setTi
interface MyObject
{
value: number;
new_value?: number;
}
然后有一个小函数,它获取一个对象并返回一个可观察的,它更新对象:
let updateObject = (object: MyObject) => {
return Observable.create(observer => {
setTimeout(() => {
object.new_value = object.value * 5;
observer.next(object);
observer.complete();
}, 1500);
});
};
现在我有了一个SourceObservable,它返回一个对象数组(例如作为服务器的响应):
我认为这是可能的,当我嵌套许多可观察的对象时,对它们进行搜索和订阅,但我认为这是丑陋的。我没有找到RxJS库提供的可观察函数,所以我问你们,你们能帮我吗
你对我有什么想法或解决办法吗
谢谢你 最简单的方法是,您只需使用
Observable.forkJoin
等待所有内部观察完成:
observable
.concatMap((objects: MyObject[]) => {
const observables = [];
objects.forEach(obj => observables.push(updateObject(obj)));
return Observable.forkJoin(observables);
})
.subscribe(...);
是的,这很有效!非常感谢,你是我的英雄!:)虽然这段代码可以回答这个问题,但提供关于它如何和/或为什么解决问题的附加上下文将提高答案的长期价值。
// here the asyncOperation should be applied to the observable
observable.subscribe((objects: MyObject[]) => {
// objects should be:
// [
// {value: 1, new_value: 5},
// {value: 2, new_value: 10},
// {value: 3, new_value: 15}
// ]
});
observable
.concatMap((objects: MyObject[]) => {
const observables = [];
objects.forEach(obj => observables.push(updateObject(obj)));
return Observable.forkJoin(observables);
})
.subscribe(...);
Observable.merge(
Observable.of({value: 1}),
Observable.of({value: 2}),
Observable.of({value: 3})
)
.timer(1500).map(obj => Object.assign(obj, {newValue: obj.value * 5}))