У меня есть следующая функция Angular 9, которую я просто не могу заставить работать так, как я хочу. Моя цель - рекурсивно заставить весь персонал работать под руководством менеджера Microsoft Graph API и вернуть его в виде плоского списка, а не дерева.
На одного пользователя приходится два вызова API. Один для получения фактического пользователя, а другой для получения отчетов.
https://graph.microsoft.com/v1.0/users/ 'userupn'
https://graph.microsoft.com/v1.0/users/ 'userupn' / directReports
private getDirectReportsGraphRecursive(upn: string) {
return forkJoin(
this.http.get<GraphUser>(`https://graph.microsoft.com/v1.0/users/${upn}`),
this.http.get<GraphUsersResponse>(`https://graph.microsoft.com/v1.0/users/${upn}/directReports`))
.pipe(
expand(values => {
values[0].directs = values[1].value;
return of(values[0].directs.forEach(direct => { this.getDirectReportsGraphRecursive(direct.userPrincipalName) }));
}),
)
.subscribe(value => {
return value;
});
}
У меня есть forkJoin, выполняющий http, идет параллельно и расширяется, выполняя рекурсию. Я вижу, что рекурсия работает, но то, что я не могу получить, - это объединить их все в один плоский ответ. Я пробовал map / mergeMap / flatMap, но я не могу тех, кто работает. В каком направлении мне смотреть?
Заранее спасибо за помощь.