带有空返回的 switchMap 不起作用 - 错误“无法读取 null 的属性‘uid’”

时间:2021-07-22 21:19:02

标签: angular rxjs

恐怕我哪儿也去不了。我买了一个教程,但 angular 是第 4 版。我现在有 12 版。 那时我对 googel 了解很多,但现在我什至无法使用 Google。

import { Injectable } from '@angular/core';
import { AngularFireAuth } from '@angular/fire/auth';
import firebase from 'firebase/app'
import { Observable, of } from 'rxjs';
import { ActivatedRoute } from '@angular/router';
import { map, switchMap } from 'rxjs/operators';
import { UserService } from './user.service';
import { EMPTY } from "rxjs";


@Injectable({
  providedIn: 'root'
})
export class AuthService {
  user1: Observable<any>;

  constructor(
    private userService: UserService,
    private afAuth: AngularFireAuth, 
    private route: ActivatedRoute) {
    this.user1 = afAuth.authState;  
  }

  login(){
    let returnUrl: any = this.route.snapshot.queryParamMap.get('returnUrl' || '/');
    localStorage.setItem('returnUrl', returnUrl);

    this.afAuth.signInWithRedirect(new firebase.auth.GoogleAuthProvider()); 
  }

  logout(){
    this.afAuth.signOut();
  }


get appUser1(): Observable<any>{
    return this.user1    
      .pipe(switchMap(user => this.userService.get(user.uid).valueChanges()))  
  }
}

登录有效但注销无效。如果我按下注销按钮(在浏览器中),它会显示错误: 错误类型错误:无法读取 null 的属性“uid”

在教程中他说。我需要更改“.pipe”以修复此错误:

.pipe(switchMap(user => {
  if (user) return this.userService.get(user.uid);

  return EMPTY;
}));

(“EMPTY”在教程“Observable.of(null)”中,但我发现它不再实际了) 几个小时前我在“user =>”处有一个编译错误,但我不记得是怎么解决的。但无论如何。注销也不能以这种方式工作。

在 Google 上,我发现了很多关于此主题的信息,但我不明白/它对我不起作用。为什么我不能在 else 情况下返回这个空?

0 个答案:

没有答案