Angular Firebase在角度2+上良好使用可观测(rxjs);
目前,我正在使用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
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());
},错误=>{
返回投掷器(错误);
});
});
}
}