我对RxJS Observable有点困难。
以下设置:
我的对象有一个界面(只是为了让事情更清晰):
interface MyObject
{
value: number;
new_value?: number;
}
然后有一个小函数,它接受一个对象并返回一个observable,它会更新对象:
let updateObject = (object: MyObject) => {
return Observable.create(observer => {
setTimeout(() => {
object.new_value = object.value * 5;
observer.next(object);
observer.complete();
}, 1500);
});
};
现在我有一个source observable,它返回一个对象数组(例如作为服务器的响应):
let observable = Observable.of<MyObject[]>([
{value: 1},
{value: 2},
{value: 3}
]);
所以,现在我想用我的&#34; updateObject()&#34;来更新数组中的每个对象。方法,所以当我订阅observable时,我得到了这个结果:
// 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}
// ]
});
我认为有可能,当我嵌套许多可观察物时,连续并订阅它们,但我认为这很难看。我没有找到由RxJS库提供的可观察功能,所以我问你们,如果你能帮助我的话!
您对我有什么想法或解决方案吗?
谢谢!
答案 0 :(得分:2)
最容易使用Observable.forkJoin
来等待所有内部Observable完成:
observable
.concatMap((objects: MyObject[]) => {
const observables = [];
objects.forEach(obj => observables.push(updateObject(obj)));
return Observable.forkJoin(observables);
})
.subscribe(...);
答案 1 :(得分:0)
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}))