如果我想调用doStuff() 当多个提取循环完成时,我将如何处理?
假设我每次提取完成后都需要调用一个函数,并检查两个数组长度的concat是否在最后一个?
let array1 = [1,2]
let array2 = [7,8]
array1.map(function(item){
fetch("/api/execution/"+item, {
method: "POST",
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json'
}
})
});
array2.map(function(item){
fetch("/api/something/"+item, {
method: "POST",
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json'
}
})
});
//call doStuff only when all the fetchs are done
function doStuff(){
console.log("yay")
}
答案 0 :(得分:4)
您正在使用.map()
启动请求,但没有保存返回的Promise实例。
let p1 = array1.map(function(item){
return fetch("/api/execution/"+item, {
method: "POST",
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json'
}
})
});
array2
也是如此。然后,您可以串联两个Promises数组,并使用Promise.all()
:
let p1 = array1.map(function(item){
return fetch("/api/execution/"+item, {
method: "POST",
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json'
}
})
});
let p2 = array2.map(function(item){
return fetch("/api/something/"+item, {
method: "POST",
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json'
}
})
});
Promise.all(p1.concat(p2)).then(function(fetchedValues) {
// all fetch calls are finished
});