我发出了一个http请求,该请求返回具有产品数组的可观察数据.对于这个产品中的每一个,我需要进行http调用,以便获得详细信息. 如何使用RxJ使其并行.现在我有了一个Products.forEach,并最终使其正常工作,但这使用了外部(对于我的方法)BehaviorSubject. 我更喜欢返回一种包含所有细节的串联对象.

    return this.apiService.getCart().pipe(
      map(({ id, products, quantity }) => {
        products.forEach(({ productId }) => this.getProduct(productId).subscribe((product) => this.cart.products.push(product)));
        return { id, quantity }
      })
    )}

推荐答案

我建议您使用forkJoin运算符,然后将产品详细信息数组作为对象的一部分返回:

return this.apiService.getCart().pipe(
    switchMap(({ id, products, quantity }) => {
        const obs = products.map(({ productId }) => this.getProduct(productId));
        return forkJoin(obs).pipe(
            map((products) => ({ id, quantity, products })),
        );
    }),
);

Angular相关问答推荐

Angulat 17@ngrx/Signals或全球服务,用什么?

MAT表的内联文本编辑-未刷新编辑图标

是否可以将Angular 路由配置为在点击带有本地人力资源S的锚点时更新Angular 路由?

使用jsPDF生成带有图像的PDF时出现灰色条纹

@ngrx/调度时未定义存储操作

等待可观察性完成后再调用下一个

在Angular中扩展多个类

Storybook 和 Angular 交互游戏测试未定义预期

如何停止在 ngOnInit() 之前调用的 ngOnChanges

如何在 ngFor 循环中创建变量?

Angular 2 - 事件列表

angular2:错误: TypeError: Cannot read property '...' of undefined

如何添加/设置环境 Angular 6 angular.json 文件

ngx-toastr,Toast 未在 Angular 7 中显示

如何将一个组件放入Angular2中的另一个组件中?

Angular 2 中的 OnChanges 和 DoCheck 有什么区别?

安装特定版本的 ng cli

单元测试错误:无法从同步测试中调用 Promise.then

缺少带有Angular的语言环境XXX的语言环境数据

如何作为模块的子模块路由到模块 - Angular 2 RC 5