Angular 9 ForkJoin проблема рекурсивного HTTP-вызова - PullRequest
0 голосов
/ 29 апреля 2020

У меня есть следующая функция 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, но я не могу тех, кто работает. В каком направлении мне смотреть?

Заранее спасибо за помощь.

...