无法读取未定义的属性'next'

Bre*_*ett 7 rxjs angular

我正在订阅一个observable,以便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();
}
Run Code Online (Sandbox Code Playgroud)

我的组件中的代码:

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

subscriptionError(){
    this.subscriptionsService.newSubscriptionFailure$.subscribe(() => {
        alert('call failed');
    });
}
Run Code Online (Sandbox Code Playgroud)

eko*_*eko 10

更改

}).catch(this.newSubscriptionError);
Run Code Online (Sandbox Code Playgroud)

至

}).catch((e)=>this.newSubscriptionError());
Run Code Online (Sandbox Code Playgroud)

要么

}).catch(this.newSubscriptionError.bind(this));
Run Code Online (Sandbox Code Playgroud)

你this没有提到Injectable其他方面