因此,我需要点击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);
//...
});
最佳答案
Promise.all
接受一个Promises
数组,而不是在参数列表中依次列出的Promises
。改成:
const fetchAll = () => Promise.all([
fetchPrices(),
fetchSupplies()
]);
注意
.then((resultsArray) => {
return resultsArray;
});
是多余的;现有的
Promise
解析为一个结果数组,因此在其上调用.then
将另一个Promise
链接到其上,并采用该结果数组并解析为该数组没有任何用处;您可以完全不使用它。另外,不需要使用
Promise.resolve
-我不知道getPrices
和getSupply
返回什么,但是如果将非Promises传递给Promise.all
,则不会引发错误,结果数组将仅包含这些价值观。 (如果返回了Promises,则所有这些Promises都解决后,Promise.all
将解决。)因此,您可以执行以下操作:const fetchAll = () => Promise.all([
getPrices(),
getSupply()
]);
(当然,如果
getPrices
和getSupply
都返回非承诺,那么首先就不需要Promise.all
了)