代码之家  ›  专栏  ›  技术社区  ›  Jørgen Svennevik Notland

类型“Observable”上不存在属性“unsubscribe”

  •  17
  • Jørgen Svennevik Notland  · 技术社区  · 7 年前

    Typescript(atom编辑器中的tslint)给了我一个Typescript错误,但我不知道如何设置正确的类型。

    错误消息: enter image description here

    聊天组件:

      private _chatObserver: Observable<firebase.database.DataSnapshot>
    
      otherMethod () {
            this._chatObserver = this._chat.observe(alarmId)
            this._chatObserver.subscribe(
              (messageSnap: firebase.database.DataSnapshot) => {
                this.messages.push(messageSnap.val())
              },
              error => {throw error})
        }
    
        ionViewDidLeave() {
           this._chatObserver.unsubscribe() 
        }
    

    _聊天提供商:

      public observe (alarmId){
        let messagesRef = this._ref.child(`alarms/${alarmId}/messages`)
    
        const observable = Observable.create(observer => {
          messagesRef.on('child_added',(messageSnap) => {
                observer.next(messageSnap)
            },
            (error) => observer.error(error)
          )
          return () => {
            messagesRef.off('value')
          };
        });
    
        return observable
      }
    
    2 回复  |  直到 7 年前
        1
  •  37
  •   Meir    7 年前

    Unsubscribe

    private _chatSubscription;
    

    然后在你的 otherMethod :

    this._chatSubscription = this._chatObserver.subscribe(...);
    

    在您的销毁/离开/终止处理程序中:

    this._chatSubscription.unsubscribe();
    
        2
  •  11
  •   Fan Cheung    2 年前

    Subscribed observable将返回一个订阅实例,该实例具有 unsubscribe()

    private _chatObserver: Observable<firebase.database.DataSnapshot>
    private _subscription:Subscription
    otherMethod () {
        this._chatObserver = this._chat.observe(alarmId)
        this._subscription=this._chatObserver.subscribe(
          (messageSnap: firebase.database.DataSnapshot) => {
            this.messages.push(messageSnap.val())
          },
          error => {throw error})
    }
    
    ionViewDidLeave() {
       this._subscription.unsubscribe() 
    }