首页 > 解决方案 > Promise.all() 等待对象属性的返回

问题描述

在异步函数内部,我有一个循环,在这个循环内部,我需要使用 await 来解决来自另一个异步函数的承诺。

async function smallestCities(states) {
  const citiesInState = [];
  for (const state of states) {
    const length = await lengthOfState(state.Sigla);
    const stateObject = {
      state: state.Sigla,
      cities: length,
    };
    citiesInState.push(stateObject);
  }

  citiesInState.sort((a, b) => {
    if (a.cities > b.cities) return 1;
    if (a.cities < b.cities) return -1;
    return 0;
  });
  return citiesInState.filter((_, index) => index < 5).reverse();
}

它工作正常,但 eslint 说不允许在循环内等待并使用 Promise.all() 来解决所有承诺。

问题是我的承诺在一个对象属性中:

函数的返回

我怎样才能弄清楚将 Promise.all() 与对象的属性一起使用?

标签: javascriptasynchronouspromiseasync-await

解决方案


将 a 链接.thenlengthOfState调用上,以使整个 Promise 解析为您需要的对象,在Promise.all:

const citiesInState = await Promise.all(
  states.map(
    state => lengthOfState(state.Sigla).then(cities => ({ state: state.Sigla, cities }))
  )
);

推荐阅读