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