ForEach内部API无法正常工作

时间:2017-12-04 06:38:34

标签: javascript angular

我正在使用angualr 4.

我有一个阵列。

这是我的阵列;

this.bookings = [
    {
     'id':'dsjdsfhkdsjhfjkds01'
    },
    {
     'id':'dsjdsfhkdsjhfjkds01'
    }
]

我需要根据id从数据库中检索数据。

这是我的剧本。

let scope = this;
scope.bookings.forEach(function(BookingItem){
  var bId = BookingItem.id;
  console.log("BId",bId);
  scope.Bservice.getbooking(scope.at,bId).subscribe(booking => {
    var responseVal = booking;
  })
})

我需要forEach Take on firstvalue然后从数据库中获取反向数据。转到第二个预订值然后从数据库中获取数据。

但我安慰了bId的价值。

ForEach逐个获取id值后从数据库中检索数据。

我该如何修复这个pblm。

请建议我,

感谢。

2 个答案:

答案 0 :(得分:1)

我并没有完全解释你的代码,但你必须这样做

你必须循环遍历bookings数组而不是foreach的参数,你需要一个可变名称而不是你的名字,

另一件事是如果你进入循环,你最后从ajax请求返回的值将覆盖你的变量的值,所以最好将响应存储在数组中,这就是为什么下面的代码使用数组来存储你对每个id的响应。

let responseFromServer = new Array<any>();    

this.bookings.forEach((bookingItem) => {
   var bId=bookingItem.id;
   console.log("BId",bId);
   scope.Bservice.getbooking(scope.at,bId).subscribe(booking=>{
      let response = new ResponseFromServer();
      responseFromServer.Add(booking);
   });
});

答案 1 :(得分:0)

由于api调用响应需要一些时间,因此您应该等待响应,直到收到响应。

您可以使用Observable forkJoin,它像promise一样工作并处理循环中的所有请求并返回响应。

import {Observable} from 'rxjs/Rx';

let observables = new Array();

this.bookings.forEach(function(booking){
    observables.push(this.Bservice.getbooking(this.at,booking.id));
})

Observable.forkJoin(observables).subscribe(
    res => console.log(res),
    error => console.log('Error: ', error)
);

Here is a documentation for forkJoin