【问题标题】:Angular 2 - Return of ObservableAngular 2 - Observable 的返回
【发布时间】:2018-07-14 16:46:11
【问题描述】:

我的 Observable 在我的服务中存在问题。 我需要为 3 个玩家获取数据。我的订阅将数据从服务签名到本地变量并将其推送到数组中。很好,但是当我从 if 语句返回数据时,我有错误。我只能看到三个玩家中的一个。如何在我的应用程序的整个生命周期中存储所有数据? 问候。

服务:

  getData(query): Observable<any> {
if(this.dataFromDb)
{
  return Observable.of(this.dataFromDb);
}

    return this.http.get(query)
      .map(res => res.json())
      .do(res => this.dataFromDb = res)
      .catch(err => Observable.throw(err.json() || 'Błąd');
  }
}

组件:

export class FriendsComponent implements OnInit {


  myDataFromDb: any[] = [];
  constructor(public dataService: DataService) {
}
private getDataFromDb(query) {
    this.dataService.getData(query).subscribe((data) =>
    {
     this.myDataFromDb.push(data);
     console.log(data);
    });
  }
  ngOnInit() {

for (let i of this.dataService.friends) {
    this.dataService.query = `${this.dataService.apiUrl}${i.nick}${this.dataService.apikey}`;

    this.getDataFromDb(this.dataService.query);

  }
    console.log(this.myDataFromDb);
    }
}

还有一些问题的照片: 开始数据

路线变更后的数据。

【问题讨论】:

    标签: json angular observable


    【解决方案1】:

    您必须使用一个对象来“缓存”响应。我个人会选择向我的函数发送 nick 和 apiKey,但是当您发送查询时,您可以这样做

    dataFromDb:any={};
    getData(query): Observable<any> {
    if(this.dataFromDb[query])
    {
      return Observable.of(this.dataFromDb[query]);
    }
    
        return this.http.get(query)
          .map(res => res.json())
          .do(res => this.dataFromDb[query] = res)
          .catch(err => Observable.throw(err.json() || 'Błąd');
      }
    }
    

    【讨论】:

    • 给这个人一大杯啤酒!许多人试图帮助我,但你的回答是正确的。
    猜你喜欢
    • 1970-01-01
    • 2016-10-25
    • 2016-12-18
    • 2017-03-26
    • 2018-04-02
    • 2016-10-18
    • 2017-06-24
    • 2021-09-24
    • 1970-01-01
    相关资源
    最近更新 更多