gpt4 book ai didi

angular - 问题是 : Property 'switchMap' does not exist on type 'Observable

转载 作者:行者123 更新时间:2023-12-05 03:02:02 30 4
gpt4 key购买 nike

我尝试在 git bash 中运行时遇到了这个问题。.switchMap 未被执行并显示错误为“错误 TS2339:属性‘switchMap’在类型‘Observable’上不存在”

我使用的代码是:

import { User } from './../classes/user';
import { Injectable } from '@angular/core';
import { Router } from '@angular/router';
import { Observable, of } from 'rxjs';
import { AngularFireAuth } from '@angular/fire/auth';
import { AngularFirestore, AngularFirestoreDocument } from '@angular/fire/firestore';
import { from } from 'rxjs';
@Injectable()
export class AuthService {

public currentUser: Observable<User | null>;

constructor(
private router: Router,
private alertService: AlertService,
private afAuth: AngularFireAuth,
private db: AngularFirestore
) {

this.currentUser = this.afAuth.authState
.switchMap((user) => {
if (user) {
return this.db.doc<User>(`users/${user.uid}`).valueChanges();
} else {
return of(null);
}
});
}

我的rxjs版本是最新的rxjs@6.3.3,nodejs版本是v8.12.0请帮助我建立一个聊天网站。

最佳答案

您的问题是,在 RxJs 6 中,switchMap(以及许多其他运算符)不再存在于 Observable 中。相反,您必须使用 .pipe() 运算符对可观察对象进行管道传输,该运算符采用任意数量的方法并将它们应用于可观察对象。然后导入 switchMap 函数以在管道中使用它..

import { switchMap } from 'rxjs/operators';

....

this.currentUser = this.afAuth.authState.pipe(
switchMap((user) => {
if (user) {
return this.db.doc<User>(`users/${user.uid}`).valueChanges();
} else {
return of(null);
})
);

如果你习惯了旧的 (RxJs 5) 行为并且你想以这种方式工作,那么有一个名为 rxjs-compat 的包(使用 npm install rxjs- 安装它compat),它允许您使用旧语法使用 RxJs 6+。

但是,使用更新的语法在性能和包大小方面都有很大的提升,因为它支持 Tree Shaking,所以我不推荐它。

关于angular - 问题是 : Property 'switchMap' does not exist on type 'Observable<User>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55204188/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com