嵌套的网络请求怎么处理

从一个网络请求返回的结果筛选符合条件的数组a,再循环a数组发起a.length次网络请求获取返回结果,
这种异步怎么写啊?

            testRequest () {
                let _this = this;
                let params = {
                    PageIndex: 1,
                    PageSize: 100,
                    PatientAgentID: _this.$store.state.mystudent.currentPatientId.ID
                };
                let result = []
                api.requestTestList(params).then(res => {
                    let arr = res.Records.map(ele => ele.ID);
                    for (let i = 0;i < arr.length; i++) {
                        api.requestTestMembers({
                            ExamID: arr[i],
                            PatientAgentID: _this.$store.state.mystudent.currentPatientId.ID,
                            PageIndex: 1,
                            PageSize: 100
                        }).then(res => {
                            let newEle = res.Records.filter(function (ele) {
                                return ele.Status === 1
                            })
                            result.concat(newEle)
                        })
                    }
                    return result
                })
            }
阅读 4.3k
3 个回答

不用写,把服务端的同事打一顿就好了~
如果打不过的话
async函数应该是目前最好的异步解决方案。http://es6.ruanyifeng.com/#do...

新手上路,请多包涵

大概写出来是这样

api.requestTestList(params).then(res => {
  return res.Records.map(ele => ele.ID);
}).then(arr => {
  const requests = arr.map(examId => {
    return api.requestTestMembers({
      ExamID: examId,
      PatientAgentID: _this.$store.state.mystudent.currentPatientId.ID,
      PageIndex: 1,
      PageSize: 100
    })
  })

  return Promise.all(requests)
}).then(responses => {
  responses.forEach(item => {
    let newEle = item.Records.filter(function (ele) {
      return ele.Status === 1
    })
    result.concat(newEle)
  })

  return result
})

但是你这一次性遍历一个数组发起这么多请求,不会爆掉服务器么?

让负责这个接口的同事重新改过

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题