首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >角2可观测到可观测[]

角2可观测到可观测[]
EN

Stack Overflow用户
提问于 2017-01-28 15:36:25
回答 3查看 496关注 0票数 0

不确定标题是否准确,也不确定确切的术语。

假设我有一些代码,如下所示。

当我使用第一种方法加载单个资源时,我可以创建一个富模型类的实例,它在传递给map(.)的函数中包装/装饰普通的JS对象。

在第二种方法中,如果响应是一个当然是对象的数组,我如何做到这一点?

代码语言:javascript
复制
@Injectable()
export class CourseService {

  constructor(private restangular: Restangular) {

  }

  public getCourse(id: number): Observable<any> {
    return this.restangular.one("courses", id).get().map(response =>
      new Course(response)
    );
  }

  public getAllCourses(): Observable<any> {
    return this.restangular.all("courses").getList().map(response => {
      //an array of courses
      console.log(response);
    });
  }
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-01-28 16:26:15

由于第二个方法接收数组,所以可以使用Array.map()迭代数组的值,并将每个值转换为Course实例:

代码语言:javascript
复制
public getAllCourses(): Observable<any> {
  return this.restangular.all("courses").getList().map(response => {
    return response.map(courseData => new Course(courseData));
  });
}

这段代码可能会引起混淆,因为:

  • 第一个.map()Observable.map() (来自RxJS库)。
  • 第二个.map()Array.map() (平原JavaScript)。

为了简洁起见,您可以将方法主体写在一行上(从而避免内部return):

代码语言:javascript
复制
public getAllCourses(): Observable<any> {
  return this.restangular.all("courses").getList().map(response => response.map(courseData => new Course(courseData)));
}

但读起来有点难。:)

票数 2
EN

Stack Overflow用户

发布于 2017-01-28 15:57:15

你对这种方法有什么看法?

代码语言:javascript
复制
@Injectable()
export class CourseService {

  constructor(private restangular: Restangular) {

  }

  public getCourse(id: number): Observable<any> {
    return this.restangular.one("courses", id).get().map(response =>
      new Course(response)
    );
  }

  public getAllCourses(): Observable<any> {
    return this.restangular.all("courses").getList().map(response => {
      //an array of courses
      let courses = [];
      for (let courseData of response) {
        courses.push(new Course(courseData);
      }
      return courses;
    });
  }
}

这适合你的问题吗?

票数 0
EN

Stack Overflow用户

发布于 2017-01-28 16:11:16

你可以简单地用

代码语言:javascript
复制
public getAllCourses(): Observable<Course[]> {
    return this.restangular.all("courses").getList().map((resp: Response) => resp.json());
}
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41911568

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档