Promise.all Ошибка: Uncaught (в обещании) TypeError: # <Promise>не повторяется - PullRequest
0 голосов
/ 23 октября 2018

Итак, у меня есть 2 API, которые мне нужно нажать, и дождаться возвращения обоих ответов, прежде чем отправлять свое действие.

Я использую Promise.all, но сталкиваюсь со следующей ошибкой:

index.js: 51 Uncaught (в обещании) Ошибка типа: # не повторяется в 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);
  //...
});

enter image description here

1 Ответ

0 голосов
/ 23 октября 2018

Promise.all принимает массив из Promises, а не Promises, перечисленные друг за другом в списке параметров.Измените на:

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

Обратите внимание, что

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

является лишним;существующий Promise преобразуется в массив результатов, поэтому вызов .then для него цепочки другого Promise для него, который принимает этот массив результатов и преобразуется в этот массив, не делает ничего полезного;Вы можете полностью его исключить.

Кроме того, нет необходимости использовать Promise.resolve - я не знаю, что getPrices и getSupply возвращают, но если вы передадите не-Обещания в Promise.all, не будет выдано никакой ошибки, результирующий массив будет просто включать эти значения.(Если обещания возвращены, то Promise.all разрешится, когда все такие обещания будут разрешены.) Таким образом, вы можете сделать:

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

(конечно, если оба getPrices и getSupply вернутсяне обещания, тогда нет нужды в Promise.all, во-первых)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...