情况1:循环多个请求,但是有请求嵌套,A请求要先发送,然后拿到A的数据发给B请求,然后拿到B的数据。这才算是循环一次完成
比如循环三次,顺序应该是 A,B,A,B,A,B
这里是通过async await和promise配合完成
把请求用promise抱起来,请求成功再返回resolve。
然后用await阻断,按顺序执行。
async function save(){
for (let i = 0; i < state.tableDataSplitOrderAll.length; i++) {
let item=state.tableDataSplitOrderAll[i]
let oid=[]
if(item.data.length>0){
item.data.forEach(i=>{
oid.push(i.order_item_id)
})
await nestedRequest(oid); //这里通过await每次循环的时候等待返回值再进行下一轮循环,注意用for循环
}
}
return
state.splitOrderShow = false
}
// 多个请求嵌套,通过await先执行第一个请求,然后拿到resolve的参数给到B请求继续执行,全部执行完毕后,上面循环的会进入下一次循环
async function nestedRequest(ids){
let info= await a(ids)
await b(ids,info)
}
// 请求里面用promise套一层,因为需要等你请求成功了拿到返回值才能算是成功执行,所以是请求成功再resolve
function a(ids){
return new Promise(resolve =>{
setTimeout(()=>{
console.log(ids,'ids')
resolve('内容888')
},1000)
})
}
function b(ids,info){
console.log(ids,info,'name')
}
情况2:多个请求按顺序执行,比如循环发送请求时
可以通过promise.all来实现
实现逻辑:先定义一个空数组,然后循环把请求加到数组内,
然后promise.all(数组)就自动按顺序执行了,
需要获取数据的时候就promise.all(数组).then()就可以拿到返回值,
返回值是一个数组,是多个请求的返回值,
你按什么顺序发送的,就会按什么顺序返回值
let promises = [];
for (let index = 0; index < list.length; index++) {
const element = list[index];
let promise = http.post('zkjk_doctor_assistant', {
hospital_id: userinfo.hospital_id,
part_id: that.link.part_id,
kf: element.name,
kf_id: element.id,
ks_ids: that.ruleForms.ks,
child_ks_ids: that.ruleForms.child_ks,
group_id: that.ruleForms.xz_value,
group_leader: 0,
file_url: '',
}, {
headers: {
hosId: userinfo.hospital_id,
}
});
promises.push(promise);
}
Promise.all(promises)
.then(responses => {
let success = true;
responses.forEach(response => {
if (response.data.code != 200) {
success = false;
this.$message({
showClose: true,
message: response.data.msg,
type: 'error'
});
}
});
if (success) {
that.dialogVisibles = false;
this.$message({
showClose: true,
type: 'success',
message: '保存成功!'
});
that.search();
}
})
.catch(error => {
// 处理错误
});