我想等待三个 HTTP 请求完成,然后再调用另一个函数来处理三个 HTTP 请求返回的数据。我尝试循环房间数(相当于所需的 HTTP 请求数),然后将设备推入数组。在将设备数组传递给下一个要处理的函数之前,我需要完成所有三个 HTTP 请求。getDeviceListByRoom(rooms_id_array: string[]) { console.log('The rooms_id_array is: ', rooms_id_array); this.room_device_map = new Map; let count = 0; for (const id of rooms_id_array) { const devicesByRoom = this.Services.getDeviceByRoom(id); devicesByRoom.subscribe((res: any) => { if (res.code === 200) { // this statement will map the list of devices to the room. this.room_device_map.set(id, res.data); // this statement will just push the list of devices from different room into one array. this.all_devices_list.push(res.data); console.log('count is: ', count++); } }, err => { console.error('ERROR', err); }); console.log('In all_devices_list is: ', this.all_devices_list); } console.log('Lalalalal'); }The code above will return 'Lalalala' first followed by the console print out of the count variable. Understandably, the for...of function is non blocking...?
3 回答
三国纷争
TA贡献1804条经验 获得超7个赞
一旦所有 3 个请求都发出,组合最新将发出
combineLatest(
this.http.get('request1'),
this.http.get('request2'),
this.http.get('request3')
).subscribe(([response1, response2, response3]) => {
// Here you can do stuff with response1, response2 and response3
});
忽然笑
TA贡献1806条经验 获得超5个赞
最简单的方法是“forkJoin”,在这种情况下,您也可以使用“zip”或“combineLatest”。
尝试这个:
import { forkJoin } from 'rxjs';
...
let req1 = this.http.get('xxx');
let req2 = this.http.get('yyy');
forkJoin([req1, req2]).subscribe(res => {
// res[0] is from req1
// res[1] is from req2
});
添加回答
举报
0/150
提交
取消