2016-04-08 21 views
2

コンストラクタでObservable and Observerを作成しています。次に、apiConnect()でnext()メソッドを送信しようとすると、Exceptionで終了します。Observerが定義されていない理由

サービスは私のアプリケーション全体で利用できるようにブートストラップされます。

private _apiServerConnected: boolean = false; 
public _apiServerConnectedObserver: Observer<boolean>; 
public apiServerConnectedObservable: Observable<boolean>; 

private _serverIdx = 0; 
private _apiServers: Array<string> = ['localhost:81', '192.168.2.210:81', '172.17.32.164:81']; 
private _server: string; 

constructor(
    private _http: Http, 
    private _apiCalls: ApiCalls 
) { 
    this._server = this._apiServers[0]; 

    // attach and create observer and observable for apiserverconnected 
    this.apiServerConnectedObservable = new Observable(observer => this._apiServerConnectedObserver = observer) 
     .startWith(this._apiServerConnected) 
     .share(); 

    this.apiConnect(); 
} 

apiConnect() { 
    this._http.get('http://' + this._server + this._apiCalls.SysConnect()) 
     .map((res) => res.json()) 
     .subscribe((data) => { 
      this._apiServerConnected = data; 

      if (this._apiServerConnected) { 
       this.apiServer = 'http://' + this._server; 
       console.log('Server connected: ' + this._server); 
       this._apiServerConnectedObserver.next(this._apiServerConnected); 
      } else { 
       this.apiConnectError(); 
      } 
     }, (error) => { 
      this.apiConnectError(); 
     },() => { 
     }); 
} 

apiConnectError() { 
    this._serverIdx++; 
    if (this._serverIdx > this._apiServers.length) { 
     this._serverIdx = 0; 
    } 
    this._server = this._apiServers[this._serverIdx]; 
    console.log('Server connection failed trying next: ' + this._server); 
    this.apiConnect(); 
} 

EXCEPTION: TypeError: _this._apiServerConnectedObserver is undefined

任意のアイデア?

+0

変数が存在することが期待されています(私の答えを参照)が、あなたがそれを作成したようには見えません。 –

答えて

1

初期化するには、apiServerConnectedObservableを購読する必要があります。それ以外の場合、初期化コールバックは呼び出されず、オブザーバは決して初期化されません。

this.apiServerConnectedObservable 
    = new Observable(observer => this._apiServerConnectedObserver = observer) 
    .startWith(this._apiServerConnected) 
    .share(); 

this.apiServerConnectedObservable.subscribe(() => { 
    (...) 
}); 
1

ここ

this._apiServerConnectedObserver.next(

あなたが変数にアクセスするが、それが初期化されることはありません。

関連する問題