0
我想轉換休息http observable與我的Angular 2應用程序中的基於socket.io的可觀察。其餘可觀察的工作原樣。隨着套接字選項,我越來越接近,但現在我得到一個錯誤,說我用於套接字的可觀察性期望一個對象,而不是一個數組。我需要它是一個能夠迭代數據項的數組。與我的Angular 2應用程序不工作的這個Observable?
首先,這裏的原始HTTP,休息觀察到的功能從我的服務(這是工作):
getByGroup() {
return this._http.get(this._url)
.map((response: Response) => response.json())
.catch(this._errorsHandler);
}
_errorsHandler(error: Response) {
console.error(error);
return Observable.throw(error.json().error || 'Server error');
}
而在組件我簽署這項這樣的:
this.clientService.getByGroup()
.subscribe(resRecordsData => this.records = resRecordsData,
responseRecordsError => this.errorMsg = responseRecordsError);
我有「記錄」聲明爲組件中的空數組。然後,我使用分配給「記錄」的observable的結果打印到視圖。以上所有的工作都很完美。
現在,這就是我想用做插座基於觀察到的(這是行不通的 - 這是在等一個對象,而不是一個數組) - 我需要幫助理解爲什麼:
getByGroup() {
const observable = new Observable(observer => {
this.socket = io(this._url);
this.socket.on('getByStage', (data) => {
return data;
});
return() => {
this.socket.disconnect();
};
});
return observable;
}
同樣,我想訂閱這個觀察到同樣的方式,像這樣:
this.clientService.getByGroup()
.subscribe(resRecordsData => this.records = resRecordsData,
responseRecordsError => this.errorMsg = responseRecordsError);
但同樣,它不是在這個二審工作,因爲我得到一個錯誤說:
類型'{}'不可分配給類型'[] any''。
那麼我該如何處理呢?我怎樣才能使服務套接字調用期望一個數組而不是一個對象?我不清楚爲什麼它期待一個對象開始。
感謝。有些東西仍然會導致問題 - 但我的猜測是這是我們的socket函數在api方面的一些東西。你在這裏看起來是正確的。 Re:你的迴應,關鍵是:你必須顯式聲明Observable是「any []」類型,否則它會隱式地返回一個對象?只是想知道爲什麼我的原始電話不是問題? – Muirik
TypeScript使用類型推斷,並在你的情況下推斷類型不兼容,所以我明確地把類型。 – kemsky
好吧,明白了。謝謝。 – Muirik