Angular 对来自可观察对象的对象数组应用一些异步操作

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

我对RxJS的可观测性有点困难

以下设置:

我的对象有一个界面(只是为了让事情更清楚):

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}))