首页 > 解决方案 > Promise.all 返回空数组

问题描述

我有一系列请求,我正在尝试运行Promise.all,但我没有得到任何回报Promise.all.then(),不知道为什么......

productIdArray.forEach(id => {
  requests.push(rp('https://******br' + '/****/v2/api/*****/' + parametersString + pessoaId + '&idProduto=' + id));
});

Promise.all(requests)
  .then((resultados) => resultados.forEach(resultado => {
    console.log(resultados)
    if (resultado) {
      accounts.push({
        'idProduto': JSON.parse(resultado).content.idProduto,
        'contas': JSON.parse(resultado).content
      });
    }
  })).catch(err => console.log(err));

return accounts;

我错过了什么吗?RP 是请求承诺库

标签: javascript

解决方案


您需要从外部函数返回一个 Promise。一旦你的函数的一部分是异步的,整个函数就是异步的。

像这样的东西应该可以解决问题(替换forEachw/ map

// using map to create an array of pending requests
const requests = productIdArray.map(id => rp('https://******br' + '/****/v2/api/*****/' + parametersString + pessoaId + '&idProduto=' + id));

// returning a promise
return Promise.all(requests)
  .then(resultados => resultados.map(resultado => ({
        'idProduto': JSON.parse(resultado).content.idProduto,
        'contas': JSON.parse(resultado).content
  })).catch(err => console.log(err));

推荐阅读