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