javascript - 将 Observable 数组转换为数组

标签 javascript angular rxjs

我正在使用 forkJoin 将多个 observable 转换为一个,然后我将其映射以转换为我在组件中用于我的 View 的某个 View 模型。

我的模型如下:

export interface MyModel {
    itemOne: Observable<ItemOne[]>;
    itemTwo: Observable<ItemTwo[]>;
    itemThree: Observable<ItemThree[]>;
}

我的 forkJoin 看起来像:

this._subscriptions.push(this.myService.getData()
    .flatMap(data => Observable.forkJoin(data
        .map(data => {
            let myModel: MyModel = {
                itemOne: this.myService.getSomeData(),
                itemTwo: this.myService.getSomeData(),
                itemThree: this.myService.getSomeData()
            };
            return Observable.forkJoin(Observable.from([myModel]));
}))).subscribe(details => {
    details.map(this.toMyModelViewModel.bind(this));
}));

现在,在我的 toMyModelViewModel 方法中,我想从这些 Observables 中选取每个值,并且想知道我如何才能做到这一点?

toMyModelViewModel(value: MyModel): any {
    return {
        itemOne: value.itemOne,
        itemTwo: value.itemTwo,
        itemThree: value.itemThree
    };
}

我是否必须订阅每个值才能获得当前值,或者是否有另一种可能更好/更清洁的方法?最终,我想要一个 MyModel 对象数组,这样我就不必担心使用 data |在我看来异步

谢谢

最佳答案

快速浏览一下您的代码,您似乎有一个初始 API 调用 (this.myService.getData()),您将从中构建结果,但该结果基于结合多个 API 调用的结果 (this.myService.getSomeData())。

我觉得你需要 MyModel 接口(interface)才能没有 Observables:

export interface MyModel {
    itemOne: ItemOne[];
    itemTwo: ItemTwo[];
    itemThree: ItemThree[];
}

... toMyViewModel 是一个工厂方法:

function toMyModelViewModel(itemOne: any, itemTwo: any, itemThree: any): MyModel {
    return {
        itemOne: itemOne as ItemOne[],
        itemTwo: itemTwo as ItemTwo[],
        itemThree: itemThree as ItemThree[]
    } as MyModel;
}

... 那么您将使用 switchMap/forkJoin如下:

this.myService.getData().switchMap(data => {
  return Observable.forkJoin(
    this.myService.getSomeData(),
    this.myService.getSomeData(),
    this.myService.getSomeData(),
    toMyModelViewModel
}).subscribe(...);

关于javascript - 将 Observable 数组转换为数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48768480/

相关文章:

javascript - Keyup 不适用于动态添加的输入组

angular - 在angular-cli中创建模块时生成路由模块

logging - Angular2 在外部文件中创建日志

javascript - 避免在转译的 javascript 中使用 require 语句

javascript - Jquery 表单提交,异步调用,然后成功提交表单

javascript - 在 foreach 循环中调用 JavaScript 函数

angular - Angular 2/Karma/Mock连接错误处理不起作用

angular - rxjs:组合可观察结果,同时已经使用异步管道显示第一个结果

javascript - 在 foreach 中等待可观察订阅结束

javascript - RxJS 将当前值推送给迟到的订阅者