Выполнение http-вызова внутри switchmap - PullRequest
0 голосов
/ 17 июня 2019

Я пишу угловое приложение с аутентификацией firebase и внутренним ядром dotnet. Я пытаюсь создать службу, чтобы я мог отслеживать UID Firebase и отслеживать, если пользователь является администратором (который получен с внутреннего сервера). Я могу успешно получить UID из Firebase без проблем, но когда я пытаюсь получить объект пользователя из моего API, я получаю ошибки в консоли.

enter image description here

Вот мой код в моем сервисе пользователя:

export class UserService {
    uid = this.afAuth.authState.pipe(
        map(authState => {
            return !authState ? null : authState.uid;
        })
    );

    isAdmin = this.uid.pipe(
        switchMap(uid => {
            if (uid) {
                console.log("there is a uid")
                this.httpClient.get<User>("https://localhost:44337/api/users/" + uid).subscribe(data => {
                    console.log(data.isAdmin); // prints 'true'
                    return observableOf(data.isAdmin);
                });
            } else {
                return observableOf(false);
            }
        })
    );

    constructor(
        private afAuth: AngularFireAuth,
        private httpClient: HttpClient) { }
}

1 Ответ

1 голос
/ 17 июня 2019

Внутри оператора switchMap вы не должны напрямую подписываться на наблюдаемое.Вы должны вернуть наблюдаемое, и оператор switchMap обработает подписку для вас.

switchMap(uid => {
            if (uid) {
                console.log("there is a uid")
                return this.httpClient.get<User>("https://localhost:44337/api/users/" + uid).pipe(map(data => {
                    console.log(data.isAdmin); // prints 'true'
                    return data.isAdmin
                }));
            } else {
                return of(false);
            }
        })

...