2017-10-24 19 views
-2

Typescript (원자 편집기의 tslint)가 타이프 스크립트 오류를 ​​표시하지만 올바른 유형을 설정하는 방법을 알 수 없습니다.'unsubscribe'속성이 'Observable <DataSnapshot>'유형에 존재하지 않습니다.

오류 메시지 : 는 enter image description here

채팅 구성 요소 :

제공 _chat
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 
    } 
+3

'unsubscribe'는 호출한다 구독 (Subscribe) - 관찰 가능한 (Observable)이 아니다. '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();