在多次fetch()

时间:2019-03-18 18:47:21

标签: javascript reactjs

如果我想调用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")
}

1 个答案:

答案 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
});