Я пытаюсь объединить несколько наблюдаемых вместе.В общем, я пытаюсь запросить файл xsd с помощью углового httpClient и проанализировать его с помощью библиотеки xml2js.проблема в том, что этот xsd-файл содержит операторы импорта, которые ссылаются на внешние файлы.
Итак, я пытаюсь сделать следующее:
- запрос основного xsd-файла
- синтаксический анализ основного xsd-файла (оператор карты rxjs)
- обработка всех операторов импорта в этом файле
- рекурсивное все 1. для каждого импорта (используйте оператор forkJoin для их объединения)
объединить проанализированный импорт с разобранным основным 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.Я думаю, что возвращение пустой наблюдаемой, если в файле нет импорта, может быть проблемой.До сих пор я не смог понять, как я могу включить импорт в мой основной объект xsd.
Я попытался создать демонстрационную версию, чтобы показать текущее состояние и проблему: https://stackblitz.com/edit/angular-x26paa