2017-04-03 1 views
3

私のサービスでsubscribeToTasks()コールが失敗した場合はいつでも、私のコンポーネントであるsubscriptionError()メソッドのコードが呼び出されるようにオブザーバブルを購読しています。簡単なアラート。問題は、このコールにいつでもエラーが発生するとthis.newSubscriptionFailure.next()が呼び出されます、私は私のブラウザのコンソールで次のエラーを取得し、次のとおりです。未定義のプロパティ 'next'を読み取ることができません

newSubscriptionFailure定義されていませんどのように「次へ」

未定義のプロパティを読み取ることができません。あなたはそれがメソッドの上に定義されていることをはっきりと見ることができますか?そのコードは、API呼び出しのエラーが起こるずっと前にヒットするはずです。私は過去にこのアプローチを使用していましたが、それはいつも効果がありました。唯一の違いは、 .next()というサービス(同じファイル newSubscriptionFailureが定義されています)を呼び出しているのに対し、私は通常 .next()を別のコンポーネントファイル。私は間違って何をしていますか?私はこれを働かせる方法、またはより良いアプローチをとることができますか?私のサービスから

コード:私のコンポーネントから

import { Observable } from 'rxjs/Observable'; 
import { Subject } from 'rxjs/Subject'; 

public subscribeToTasks(period: string, stripeToken: string): Observable<any> {   
    let body = JSON.stringify({ period, stripeToken }); 
    let headers = new Headers({ 'Content-Type': 'application/json' }); 
    let options = new RequestOptions({ headers: headers });   
    return this.authHttp.post(this.apiTasks, body, options).map(response => { 
     return response.json(); 
    }).catch(this.newSubscriptionError); 
} 


newSubscriptionFailure = new Subject(); 
newSubscriptionFailure$ = this.newSubscriptionFailure.asObservable(); 

public newSubscriptionError() { 
    this.newSubscriptionFailure.next(); 
} 

コード:

ngOnInit(): void { 
    this.subscriptionError(); 
} 

subscriptionError(){ 
    this.subscriptionsService.newSubscriptionFailure$.subscribe(() => { 
     alert('call failed'); 
    }); 
} 

答えて

6

変更

}).catch(this.newSubscriptionError); 

}).catch((e)=>this.newSubscriptionError()); 

または

}).catch(this.newSubscriptionError.bind(this)); 

誰が私が持っていた同じ問題を持っている場合は、あなたのthisは、そうでない場合はInjectable

+1

this.newSubscriptionError.bind(this)fixed、私のために、ありがとう! – Brett

0

を参照のうえされていません。私は、次のOnDestroyメソッドで呼び出すthis.destroy $というテーマを使用していました。サブスクライブされたオブザーバブルでそれを使用:.takeUntil(this.destroyed$)。私はこの破壊的なオブジェクトを初期化することを忘れていました。 destroy$: Subject<any> = new Subject<any>();を使用した後、エラーは消え去った。

関連する問題