Используйте forkJoin
, если вы хотите подписаться на несколько наблюдаемых параллельно.
getDocumentsByGroupId() {
// create an array of observables - won't be run until subscribe is called
const observables = this.form.formGroups
.map(group => this.mapGroupToObservable(group));
forkJoin(observables).subscribe(documents => {
// documents will be an array of all the responses
console.log(documents);
// [ ... ]
});
}
private mapGroupToObservable(group) {
return this.documentService
.findApprovedDocumentsUsingGET(this.possibility.DOCUMENT_FORM_GROUP,
group.id.toString(), 'body', false, false)
}
forkJoin
будет запускать все наблюдаемые параллельно и вызывать ваш обратный вызов подписки при возврате последней. .
Я разбил ваш код на части, чтобы сохранить настройки в чистоте для облегчения понимания ответа.
Обычно я тоже набираю функции и переменные, но я не был уверен ваших типов.
Сведение объектов ответа
Если вы хотите преобразовать ваш массив массивов в плоский массив, вы можете использовать .flat()
или .reduce()
.
плоская
Нет IE поддержка - необходимо заполнить поли
const flattened = documents.flat();
уменьшить
const flattened = documents.reduce((acc, val) => acc.concat(val), []);
Пример уменьшения прямо из MDN документов для квартиры