You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取RxJs Observable嵌套对象数组的值并等待内部请求resolve?

解决方案

你需要把每个文件对应的importantInfoCall返回的Observable都收集起来,用forkJoin合并后等待所有请求完成,再组装最终的文件对象数组,替换原有的map操作符为switchMap来切换到新的合并Observable即可。

调整后的完整代码

import { forkJoin, switchMap, map } from 'rxjs';

function getData() {
    return forkJoin([
             filesApiRequest,
             userApiRequest
           ])
        .pipe(switchMap(([files, userInfo]) => {
          // 把每个文件转换成Observable,等待importantInfoCall返回后组装对象
          const fileItemObservables = files.getFilesList()
              .map((file) => {
                const name = file.getName();
                // 每个文件的独立Observable,拿到异步结果后返回完整对象
                return importantInfoCall(userInfo.name, name).pipe(
                  map(importantInfo => ({
                    data1: file.data1, // 替换为文件对应的原始字段即可
                    data2: file.data2,
                    name,
                    hasImportantInfo: importantInfo
                  }))
                )
              });
          // 等待所有文件的异步请求完成,返回最终的完整数组
          return forkJoin(fileItemObservables);
        }));
  }

逻辑说明

  • 替换原代码中的map操作符为switchMap:因为我们需要返回一个新的Observable流,而非直接返回同步处理的结果
  • 遍历文件列表时,每个文件生成独立的Observable:先执行importantInfoCall拿到异步返回的结果,再组装成符合要求的完整文件对象
  • 用forkJoin合并所有文件的Observable,等待全部异步请求完成后,一次性返回完整的文件对象数组
  • 注意原代码中userApiRquest存在拼写错误,修正为userApiRequest避免运行报错
  • 最终调用getData()时直接订阅,拿到的就是所有字段都已加载完成的文件数组,不需要额外处理异步逻辑

内容的提问来源于stack exchange,提问作者trebek1

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 22:15:05