Angular Firebase在角度2+上良好使用可观测(rxjs);

Angular Firebase在角度2+上良好使用可观测(rxjs);,angular,firebase,firebase-realtime-database,rxjs,observable,Angular,Firebase,Firebase Realtime Database,Rxjs,Observable,目前,我正在使用Rxjs中的主题,没有任何问题,简单的例子如下: 服务 rooms: Room[] = []; roomsSubject = new Subject<Room[]>(); emitRooms() { this.roomsSubject.next(this.rooms); } getRooms() { firebase.database().ref('/rooms').on('value', data

目前,我正在使用Rxjs中的主题,没有任何问题,简单的例子如下:

服务

 rooms: Room[] = [];
    roomsSubject = new Subject<Room[]>();

    emitRooms() {
        this.roomsSubject.next(this.rooms);
    }

    getRooms() {
        firebase.database().ref('/rooms').on('value', data => {
            this.rooms = data.val() ? Object.values(data.val()) : [];
            console.log(data.val());
            this.emitRooms();
        }, error => {
            console.log("getRooms: ", error);
        });
    }
一切正常,但在这种情况下,我只需要一个可观察的(我不从客户端发出数据)。因此,我尝试将此代码更新为:

getRooms() {
    return firebase.database().ref('/rooms').on('value', data => {
        return of(data.val());
        
    }, error => {
        console.log("getRooms: ", error);
    });
}
组成部分:

rooms: Room[];
roomsSubscription: Subscription;
ngOnInit() {
    this.roomService.getRooms();
    this.roomsSubscription = this.roomService.roomsSubject.subscribe((rooms: Room[]) => {
        this.rooms = rooms;
    });

}
ngOnInit() {
    this.roomsSubscription = this.roomService.getRooms().subscribe((rooms: Room[]) => {
        this.rooms = rooms;
    });

}
订阅时出错:

error TS2339: Property 'subscribe' does not exist on type '(a: DataSnapshot, b?: string) => any'
更新至后:

getRooms(): Observable<any> {
getRooms():可观察{
我得到:

error TS2322: Type '(a: DataSnapshot, b?: string) => any' is not
assignable to type 'Observable<any>'.   Property '_isScalar' is
missing in type '(a: DataSnapshot, b?: string) => any'.
错误TS2322:Type'(a:DataSnapshot,b?:string)=>any'
可分配给类型“Observable”。属性“\u isScalar”为
类型“”中缺少“”(a:DataSnapshot,b?:string)=>any'。
我一直在跟踪stackoverflows以更正错误,也一直在处理新错误。我正在开发Visual Studio代码


有没有可能在没有Angularfire的情况下使用Observable?

错误的原因是,您返回的是从
firebase.database().ref('/rooms')返回的内容。在(…)
上,它是
类型的值(a:DataSnapshot,b?:string)=>any
。您要发送的是
Observable

为此,您可以简单地使用
Observable.create
。在这种情况下,如果出现错误,您可以使用
throwerr

...
import { Observable, throwError } from 'rxjs';
...

@Injectable()
export class RoomService {

  getRooms(): Observable<any> {
    return Observable.create(observer => {
      firebase.database().ref('/rooms').on('value', data => {
        return observer.next(data.val());
      }, error => {
        return throwError(error);
      });
    });
  }

}
。。。
从“rxjs”导入{observatable,throwerr};
...
@可注射()
出口舱位服务{
getRooms():可观察{
返回可观察的。创建(观察者=>{
firebase.database().ref('/rooms').on('value',data=>{
返回observer.next(data.val());
},错误=>{
返回投掷器(错误);
});
});
}
}