Наблюдаемые изнутри наблюдаемые и слияние результатов с другими - PullRequest
0 голосов
/ 03 декабря 2018

Я пытаюсь объединить несколько наблюдаемых вместе.В общем, я пытаюсь запросить файл xsd с помощью углового httpClient и проанализировать его с помощью библиотеки 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.Я думаю, что возвращение пустой наблюдаемой, если в файле нет импорта, может быть проблемой.До сих пор я не смог понять, как я могу включить импорт в мой основной объект xsd.

Я попытался создать демонстрационную версию, чтобы показать текущее состояние и проблему: https://stackblitz.com/edit/angular-x26paa

...