2016-04-08 9 views
2

Yapıcıda Gözlemlenebilir ve Gözlemci oluşturuyorum. Ardından, apiConnect() öğesinde next() yöntemini göndermeye çalışmak bir Özel Durumda sona erer.Neden Gözlemci tanımlanmamış

Hizmet, tüm uygulamamın üzerinden erişilebilir olacak şekilde önyüklenecek.

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

Herhangi bir fikir?

+0

Değişkenin var olmasını beklediğinizden görünüyor (cevabıma bakın) ancak hiç oluşturduğunuza benzemiyor. –

cevap

1

Başlamak için gözlemlenebilir olan apiServerConnectedObservable'da abone olmanız gerekir. Aksi takdirde başlatma geri çağrısı hiçbir zaman çağrılmaz ve gözlemci hiçbir zaman başlatılmaz.

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

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

İşte

this._apiServerConnectedObserver.next(

Eğer değişken erişmek ama hiçbir zaman başlatıldı.