可观察的内部可观察并将结果合并到其他

时间:2018-12-03 10:37:26

标签: angular xsd rxjs observable rxjs-pipeable-operators

我正在尝试将多个可观察物合并在一起。总的来说,我试图使用有角度的httpClient请求一个xsd文件,并使用xml2js库对其进行解析。问题是此xsd文件包含引用外部文件的导入语句。

所以我想做的是以下事情:

  1. 请求主xsd文件
  2. 解析主要的xsd文件(rxjs映射运算符)
  3. 处理该文件中的所有导入语句
  4. 对于每个导入,全部1.递归(使用forkJoin运算符进行合并)
  5. 将已解析的导入与已解析的主xsd文件合并

    this.http.get('<PATH to main xsd>')
      .pipe(map(data => {
        xml2js.parseString(data, (err, xmlObject) => {
          if (err) {
            console.error('ERROR', err);
          } else {
          data = xmlObject;
          }
        });
        return data;
      }))
      .pipe(mergeMap((data) => {
        if (xmlObject.xs_schema.xs_import !== undefined) {
          const requests: Observable<any>[] = [];
          for (const xmlImport of xmlObject.xs_schema.xs_import) {
            const path = 'xmlImport.path';
            requests.push(this.getXsdSchema(path));
          }
          return forkJoin(requests);
        } else {
          return empty();
        }
      }));
    

以上代码将一直运行,直到对其中一个导入文件执行了带有mergeMap的管道为止。我认为如果文件中没有导入,则返回一个空的observable可能是一个问题。 到目前为止,我还无法弄清楚如何将导入内容包含在我的主要xsd对象中。

我试图组成一个演示以显示当前状态和问题: https://stackblitz.com/edit/angular-x26paa

0 个答案:

没有答案