angular - 将 Observable 映射到对象数组

标签 angular typescript ionic-framework

我有 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));
  });
}

订阅:

this.restProvider.getNews().subscribe((news: News[]) => {
  this.news = news;
});

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

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

response.map is not a function

最佳答案

下面的代码可以帮助您处理错误:

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

只需要在订阅函数中添加error参数即可。

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

this.restProvider.getNews().subscribe((news:any) => {
  this.news = news;
});

关于angular - 将 Observable 映射到对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49792196/

相关文章:

javascript - 如何编写和使用 @types 或 DefinitelyTyped 上不存在的自定义声明文件?

javascript - Storybook 为一个故事预定义视口(viewport)/参数

android - 如何在 ionic 项目中找到(<android>/<app>/build.gradle)

javascript - Ionic 3 Google map 不显示在桌面浏览器上

javascript - Angular - 添加动态组件时出现异常

browser - @angular/platform-b​​rowser 与 @angular/platform-b​​rowser-dynamic

angular - 如何在 Angular 5 View 中访问枚举值

javascript - 如何从 Angular 链接获取值(value)

javascript - 极小极大算法的井字游戏

android - 在 ionic android 平台中放置插页式广告的正确方法