我正在尝试将多个可观察物合并在一起。总的来说,我试图使用有角度的httpClient请求一个xsd文件,并使用xml2js库对其进行解析。问题是此xsd文件包含引用外部文件的导入语句。
所以我想做的是以下事情:
将已解析的导入与已解析的主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