我正在使用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。
请建议我,
感谢。
答案 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)
);