【问题标题】:How to return an observable from a subscribe in order to be subscribed?如何从订阅中返回 observable 以便被订阅?
【发布时间】:2017-03-26 21:03:07
【问题描述】:

我的想法是这样做:

getCast(id:number, numCast:number){
        return this.getCredits(id)
            .map( credits => credits.cast.length >= numCast ? credits.cast.slice(0,numCast) : credits.cast )
            .subscribe(character => {
                for(let index in character){
                    return this.getPerson(character[index].id);
                }
            });
    }

getPerson(person_id:number) {
    return this.http.get('https://api.themoviedb.org/3/person/'+person_id+'?'+this.apiKey)
                    .map(data => JSON.parse(data['_body']))
}

this.mvs.getCast(this.route.snapshot.params['id'], 6)
        .subscribe( data => { console.log(data); })

但它根本不起作用。 控制台中的错误说:

_this.mvs.getCast(...).subscribe is not a function

【问题讨论】:

  • 我不确定您要在这里做什么。如果您在映射后已经订阅了this.mvs.getCast,为什么还要在this.mvs.getCast 订阅?请你提供一个 Plunker 吗?
  • Beucase getCast 应该返回一个可观察的演员,为此我需要获取电影的演员阵容,然后我需要每个演员的详细信息。我想从 this.getPerson(character[index].id); 返回 observable
  • 如果你想在getCast之外subscribe,你不应该在subscribe里面。改用另一个map,所以你仍然返回一个可观察的..

标签: angular typescript rxjs observable


【解决方案1】:

这里的问题是您订阅了两次getCast(内部和外部)。像这样的东西应该可以工作:

从电影中获取演员表

getCast(id:number, numCast:number) {
  return this.getCredits(id)
    .map(credits => credits.cast.length >= numCast ? credits.cast.slice(0,numCast) : credits.cast );
}

订阅getCast获取所有演员

this.mvs.getCast(this.route.snapshot.params['id'], 6)
  .subscribe(character => {
    for(let index in character) {
      return this.getPerson(character[index].id);
    }
  })

然后,订阅getPerson 以显示演员的数据

getPerson(person_id: number) {
  return this.http.get(`https://api.themoviedb.org/3/person/${person_id}?${this.apiKey}`)
    .map(data => JSON.parse(data['_body']))
    .subcribe(actor => this.actor = actor);
}

【讨论】:

    猜你喜欢
    • 2017-02-17
    • 1970-01-01
    • 2019-03-09
    • 1970-01-01
    • 2018-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-29
    相关资源
    最近更新 更多