将 Observable 映射到对象数组

jan*_*s83 4 typescript ionic-framework angular

我有rest api,它返回带有数据的json数组。在客户端,我使用此代码从请求创建对象。

public getNews(): Observable<News[]> {

return this.http.get(this.baseUrl + '/news')
  .pipe(
    catchError(this.handleError('getNews', []))
  )
  .map(res => {
    let response: any = res;
    return response.map((item) => new News(item));
  });
}
Run Code Online (Sandbox Code Playgroud)

订阅:

this.restProvider.getNews().subscribe((news: News[]) => {
  this.news = news;
});
Run Code Online (Sandbox Code Playgroud)

但是,当响应不是数组而只有单个元素时,我该如何解决问题?或者响应是错误的,例如来自 API 的意外数据?

目前在这些情况下,我的应用程序抛出此错误:

response.map 不是函数

Pra*_*eel 8

以下代码应该可以帮助您处理错误:

this.restProvider.getNews().subscribe((news: News[]) => {
  this.news = news;
}, (err) => {
console.log(err);
});
Run Code Online (Sandbox Code Playgroud)

您只需要在 subscribe 函数中添加 error 参数即可。

现在来回答你的第一个问题:如果响应是单个对象怎么办?-> 函数的签名将始终强制它返回一个数组。该错误将在订阅端生成。对此的一个简单解决方案是更改响应的数据类型。

this.restProvider.getNews().subscribe((news:any) => {
  this.news = news;
});
Run Code Online (Sandbox Code Playgroud)