多个获取承诺 - 相同 url,不同主体

Multiple fetch Promises - same url, different body

尝试多次 fetch 承诺相同 URL,但每次调用的主体不同。目前我正在把它们全部写出来。我将如何以不那么冗长的方式写这篇文章?

Promise.all([
    fetch("https://cors-anywhere.herokuapp.com/https://api.myurl.com/verify", {
      body: `link=${productVariant1}&license_key=${licenseKey}`,
      headers: {
        "Content-Type": "application/x-www-form-urlencoded"
      },
      method: "POST"
    }).then(do something),
    fetch("https://cors-anywhere.herokuapp.com/https://api.myurl.com/verify", {
      body: `link=${productVariant2}&license_key=${licenseKey}`,
      headers: {
        "Content-Type": "application/x-www-form-urlencoded"
      },
      method: "POST"
    }).then(do something),
  ]).then(data => {

      /* process response */
    }

总共有 5 个 Promise,只有调用的 productVariant 部分不同。

你当然可以用地图做到这一点:

Promise.all([productVariant1, productVariant2].map((productVariant, i) => {
return fetch("https://cors-anywhere.herokuapp.com/https://api.myurl.com/verify", {
          body: `link=${productVariant}&license_key=${licenseKey}`,
          headers: {
            "Content-Type": "application/x-www-form-urlencoded"
          },
          method: "POST"
        }).then(data => console.log(`Promise ${i} done`))
})
).then(data => {
console.log("all promises done")
})

您可以创建一个函数:


function Fetch(body) {
  return fetch("https://cors-anywhere.herokuapp.com/https://api.myurl.com/verify", {
    body,
    headers: {
      "Content-Type": "application/x-www-form-urlencoded"
    },
    method: "POST"
  }).then(doSomething)
}

// And then

Promise.all([
  Fetch(`link=${productVariant2}&license_key=${licenseKey}`),
  Fetch(`link=${productVariant2}&license_key=${licenseKey}`)
]).then(responses => {
  // do something with responses
})

或者如果只有你正在改变的东西