为了账号安全,请及时绑定邮箱和手机立即绑定

在继续执行另一个函数之前等待所有 HTTP 请求返回

在继续执行另一个函数之前等待所有 HTTP 请求返回

Cats萌萌 2021-11-12 16:16:53
我想等待三个 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 回答

?
慕的地10843

TA贡献1785条经验 获得超8个赞

forkJoin 是你的朋友。

(我在手机上,抱歉我的简短)


查看完整回答
反对 回复 2021-11-12
?
三国纷争

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

});


查看完整回答
反对 回复 2021-11-12
?
忽然笑

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

});


查看完整回答
反对 回复 2021-11-12
  • 3 回答
  • 0 关注
  • 234 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信