2017-10-24 6 views
-2

Typescript(atomエディタのtslint)が私にタイスクリプトエラーを与えていますが、正しい型を設定する方法がわかりません。プロパティ 'unsubscribe'が型 'Observable <DataSnapshot>'に存在しません

エラーメッセージ: 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() 
    } 

_chatプロバイダ:

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 
    } 
+3

'unsubscribe'が上で呼び出されなければなりません'サブスクリプション ' - 「観察可能」ではない'subscribe'の呼び出しは' Subscription'を返します。 – cartant

答えて

2

この

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() 
} 
2

を試してみてくださいUnsubscribeは、サブスクリプション自体のメソッドです。したがって、最上部に追加します。あなたのotherMethodで、その後

private _chatSubscription; 

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

そして、あなたの破壊/去る/終了ハンドラ内を:

this._chatSubscription.unsubscribe(); 
関連する問題