В данный момент я без проблем использую Subject из 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);
});
}
Компонент:
rooms: Room[];
roomsSubscription: Subscription;
ngOnInit() {
this.roomService.getRooms();
this.roomsSubscription = this.roomService.roomsSubject.subscribe((rooms: Room[]) => {
this.rooms = rooms;
});
}
Все работает нормально, но в этом случае мне просто нужен Observable (я не посылаю данные от клиента). Поэтому я попытался обновить этот код до:
getRooms() {
return firebase.database().ref('/rooms').on('value', data => {
return of(data.val());
}, error => {
console.log("getRooms: ", error);
});
}
Компонент:
ngOnInit() {
this.roomsSubscription = this.roomService.getRooms().subscribe((rooms: Room[]) => {
this.rooms = rooms;
});
}
Ошибка при подписке:
ошибка TS2339: свойство «подписка» не существует для типа »(a:
DataSnapshot, b ?: string) => any '
После обновления до:
getRooms(): Observable<any> {
Я получил:
ошибка TS2322: Тип '(a: DataSnapshot, b ?: string) => any' не является
присваивается типу «Наблюдаемый». Свойство _isScalar является
отсутствует в типе '(a: DataSnapshot, b ?: string) => any'.
Все время, пока я следовал за стеками, исправлял свои ошибки, и все время получал новые ошибки. Я занимаюсь разработкой кода Visual Studio.
Есть ли шанс использовать Observable без Angularfire?