如何使用多个数组顺序执行promises?

时间:2018-04-23 15:26:26

标签: javascript promise

我试图只在前一个成功之后调用一个承诺。我循环遍历美国的所有邮政编码,然后点击api从中获取信息。我需要承诺相互执行而不是并行执行。

这是我目前的代码。

const fetchDealersByZipProx = function() {
  const prox = [30, 50, 100];
  states.map(({ abbr }) => {
    zipcodes.lookupByState(abbr).map(({ zip }) => {
      prox.map(async p => {
        const result = await fetch(
          `${apiBaseURL}/${zip}/${p}`
        ).then(res => res.json);
        console.log(result);
      });
    });
  });
};

2 个答案:

答案 0 :(得分:3)

由于您无论如何都在使用async / await,只需编写一个正常的循环:

async function fetchDealersByZipProx() {
  const prox = [30, 50, 100];
  for (const {abbr} of states) {
    for (const {zip} of zipcodes.lookupByState(abbr)) {
      for (const p of prox) {
        const res = await fetch(`${apiBaseURL}/${zip}/${p}`);
        const result = await res.json(); // needs a method call, btw
        console.log(result);
      }
    }
  }
}

答案 1 :(得分:-3)

默认情况下,es6中的数组方法是异步的 - 您可以随时返回oldschool循环,因为它们将在async / await es6功能中同步运行