'共享'在'Observable<unknown>'类型上不存在。

问题描述 投票:-2回答:1

nativescript Angular

我得到了一个 'share' does not exist on type 'Observable<unknown>'在下面的代码中,我试着将导入改为 {分享}来自'rxjsinternaloperatorsshare'。 我对angular不熟悉。

 getYowls(): Observable<any> {
    return new Observable((observer: any) => {
      let path = 'Yowls';

        let onValueEvent = (snapshot: any) => {
          this.ngZone.run(() => {
            let results = this.handleSnapshot(snapshot.value);
             observer.next(results);
          });
        };
        firebase.addValueEventListener(onValueEvent, `/${path}`);
    }).share();              
  }

我对angular.firebase.service.ts不熟悉。

import {Injectable, NgZone} from "@angular/core";
import {User, Yowl} from "../models";
import { BackendService } from "./backend.service";
const firebase = require("nativescript-plugin-firebase");
import {Observable} from 'rxjs';
import {BehaviorSubject} from 'rxjs';
import { share } from 'rxjs/internal/operators/share';

@Injectable()
export class FirebaseService {
  constructor(
    private ngZone: NgZone,
  ){}


yowls: BehaviorSubject<Array<Yowl>> = new BehaviorSubject([]);
private _allYowls: Array<Yowl> = [];
chats: BehaviorSubject<Array<Yowl>> = new BehaviorSubject([]);
private _allChats: Array<Yowl> = [];

  getMessage(){ 
    firebase.addOnMessageReceivedCallback(function (data ){
        alert(JSON.stringify(data));
    })
  }

  register(user: User) {
    return firebase.createUser({
      email: user.email,
      password: user.password
    }).then(
          function (result:any) {
            return JSON.stringify(result);
          },
          function (errorMessage:any) {
            alert(errorMessage);
          }
      )
  }

  login(user: User) {
    return firebase.login({
      type: firebase.LoginType.PASSWORD,
      passwordOptions: {
        email: user.email,
        password: user.password
      }
    }).then((result: any) => {
          BackendService.token = result.uid;
          return JSON.stringify(result);
      }, (errorMessage: any) => {
        alert(errorMessage);
      });
  }

  logout(){
    BackendService.token = "";
    firebase.logout();    
  }

  resetPassword(email) {
    return firebase.resetPassword({
    email: email
    }).then((result: any) => {
          alert(JSON.stringify(result));
        },
        function (errorMessage:any) {
          alert(errorMessage);
        }
    ).catch(this.handleErrors);
  }  

 getYowls(): Observable<any> {
    return new Observable((observer: any) => {
      let path = 'Yowls';

        let onValueEvent = (snapshot: any) => {
          this.ngZone.run(() => {
            let results = this.handleSnapshot(snapshot.value);
             observer.next(results);
          });
        };
        firebase.addValueEventListener(onValueEvent, `/${path}`);
    }).share();              
  }

  handleSnapshot(data: any) {
    //empty array, then refill and filter
    this._allYowls = [];
    if (data) {
      for (let id in data) {        
        let result = (<any>Object).assign({id: id}, data[id]);
          this._allYowls.push(result);
      }
      this.publishUpdates();
    }
    return this._allYowls;
  }

  getChats(): Observable<any> {
    return new Observable((observer: any) => {
      let path = 'Chats';

        let onValueEvent = (snapshot: any) => {
          this.ngZone.run(() => {
            let results = this.handleChatSnapshot(snapshot.value);
             observer.next(results);
          });
        };
        firebase.addValueEventListener(onValueEvent, `/${path}`);
    }).share();              
  }

  handleChatSnapshot(data: any) {
    //empty array, then refill and filter
    this._allChats = [];
    if (data) {
      for (let id in data) {        
        let result = (<any>Object).assign({id: id}, data[id]);
          this._allChats.push(result);
      }
      this.publishChatUpdates();
    }
    return this._allChats;
  }

  sendYowl(Yowl:any) {
    let yowl = Yowl;   
    return firebase.push(
        "/Yowls",
        { "name": "Mr. Growlllr", "username": "MrGrwwlr", "text": "Yooowwwwlll!", "UID": BackendService.token, "date": 0 - Date.now()}
      ).then(
        function (result:any) {
          return 'Yowwled!';
        },
        function (errorMessage:any) {
          console.log(errorMessage);
        }); 
  }

  chat(message:string) {
    //let chat = Chat; 
    console.log(message)  
    return firebase.push(
        "/Chats",
        { "message": message, "to": "MrGrwwlr", "from": BackendService.token, "date": 0 - Date.now()}
      ).then(
        function (result:any) {
          return "chatted";
        },
        function (errorMessage:any) {
          console.log(errorMessage);
        }); 
  }

   publishUpdates() {
    this._allYowls.sort(function(a, b){
        if(a.date < b.date) return -1;
        if(a.date > b.date) return 1;
      return 0;
    })
    this.yowls.next([...this._allYowls]);
  }

  publishChatUpdates() {
    this._allChats.sort(function(a, b){
        if(a.date > b.date) return -1;
        if(a.date < b.date) return 1;
      return 0;
    })
    this.chats.next([...this._allChats]);
  }

  handleErrors(error) {
    console.log(JSON.stringify(error));
    return Promise.reject(error.message);
  }
}
typescript nativescript-angular
1个回答
1
投票

自从RxJS 6(检查你的 package.json 以查看安装的版本)语法改变为使用管道操作符。

import { share } from 'rxjs/operators';

someObservable.pipe(share());
© www.soinside.com 2019 - 2024. All rights reserved.