因此,我需要点击2个API,并在我分派动作之前等待这两个响应返回。

我正在使用Promise.all,但是遇到以下错误:


  index.js:51未捕获(承诺)TypeError:#不可迭代
      在Function.all()


const fetchPrices = () => Promise.resolve(getPrices());
const fetchSupplies = () => Promise.resolve(getSupply());
const fetchAll = () => Promise.all(fetchPrices(), fetchSupplies()).then((resultsArray) => {
  return resultsArray;
});

// GET coins from coinmarketcap Pro API v1.
export const startGetPrices = () => dispatch => fetchAll().then((res) => {
  console.log('res', res);
  //...
});


javascript - Promise.all错误:未捕获( promise )TypeError:#<Promise>不可迭代-LMLPHP

最佳答案

Promise.all接受一个Promises数组,而不是在参数列表中依次列出的Promises。改成:

const fetchAll = () => Promise.all([
  fetchPrices(),
  fetchSupplies()
]);


注意

.then((resultsArray) => {
  return resultsArray;
});


是多余的;现有的Promise解析为一个结果数组,因此在其上调用.then将另一个Promise链接到其上,并采用该结果数组并解析为该数组没有任何用处;您可以完全不使用它。

另外,不需要使用Promise.resolve-我不知道getPricesgetSupply返回什么,但是如果将非Promises传递给Promise.all,则不会引发错误,结果数组将仅包含这些价值观。 (如果返回了Promises,则所有这些Promises都解决后,Promise.all将解决。)因此,您可以执行以下操作:

const fetchAll = () => Promise.all([
  getPrices(),
  getSupply()
]);


(当然,如果getPricesgetSupply都返回非承诺,那么首先就不需要Promise.all了)

07-24 09:44
查看更多