【问题标题】:How to create array of objects from http.get如何从 http.get 创建对象数组
【发布时间】:2019-01-19 17:35:03
【问题描述】:

我有 http.get,我不可能创建对象数组。你能帮助我吗 ?我需要在返回的对象数组上创建循环,但我不能这样做。

export class Link {
  idStat: String;
  idAccount: String;
}

links: Link [];

router.get('/linkGetAll', function(req, res, next) {
  Link.find(function (err, products) {
  if (err) return next(err);
    res.json(products);
  });
});

getAllLinks(){
  return this.http.get('/main/linkGetAll');
}

 this.api.getAllLinks().subscribe((data) => {
  this.links = data;
})

for(let item in this.links)
{
  DOESN'T WORK
}

【问题讨论】:

  • 您在“数据”中究竟收到了什么?一旦订阅从“getAllLinks”调用返回数据,this.links 也将被填充。尝试将您的 for 循环放入 .subscribe((data) => { block
  • mongodb表数据
  • Observables 是异步的,这就是重点。如果要访问数据,请在回调中进行。

标签: arrays angular http object


【解决方案1】:
getAllLinks(){
  return this.http.get('/main/linkGetAll')
    .pipe(map(res => {

       // do something here
       // res.forEach() or res.map()
       return 'it';
     })
   );
}

去之前

for(let item in this.links) { DOESN'T WORK }

确保 this.links 中有数据。(使用 async/await 和 toPromise())

【讨论】:

  • Async/await 用于 promises,而不是 observables。
  • @jonrsharpe,当您修改响应时,它肯定不是Observable。所以你可以在上面使用toPromise() 然后使用 async/await ..
【解决方案2】:

请阅读 this section 关于 Angular 教程的 HTTP 和 Angular API

get 方法接受一个类型:

get<T>(...): Observable<T>

因此您可以修改 getAllLinks 的实现:

getAllLinks(): Observable<Link[] {
    return this.http.get<Link[]>('/main/linkGetAll');
}

现在您应该可以迭代响应了:

getAllLinks().subscribe(links => {
    links.forEach(link => // do what you need);
}

【讨论】:

    猜你喜欢
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-04
    • 1970-01-01
    • 2021-08-02
    • 1970-01-01
    • 2013-12-02
    相关资源
    最近更新 更多