Size: a a a

NodeUA - JavaScript and Node.js in Ukraine

2021 July 05

r

randomtron in NodeUA - JavaScript and Node.js in Ukraine
+ контекст непонятен.
источник

IS

Isayev Shamshod🎻 in NodeUA - JavaScript and Node.js in Ukraine
async function getData(index){
const response = await axios.get(/location/get-cities/${index})
 
       return response
}



async function cities() {
  const res = sortedCountries.reduce(

      async (acc, indexOfCity, indexElem) => {

        const result = await getData(indexOfCity);

        acc[indexOfCity] = result;

        console.log(acc);
        return acc;
      },{}
)}
источник

IS

Isayev Shamshod🎻 in NodeUA - JavaScript and Node.js in Ukraine
в консоле данные


Promise {<fulfilled>: {…}, 181: Array(0)}
181: Array(0)
length: 0
proto: Array(0)
proto: Promise
[[PromiseState]]: "fulfilled"
[[PromiseResult]]: Object
источник

IS

Isayev Shamshod🎻 in NodeUA - JavaScript and Node.js in Ukraine
Данные которые я хотел находятся в Promise Result
источник

ИМ

Илон Макс in NodeUA - JavaScript and Node.js in Ukraine
так ты респонс ложишь
источник

АМ

Андрей Москаленко... in NodeUA - JavaScript and Node.js in Ukraine
reduce с асинхронностью ? так можно было ?
источник

IS

Isayev Shamshod🎻 in NodeUA - JavaScript and Node.js in Ukraine
Разве нет
источник

ИМ

Илон Макс in NodeUA - JavaScript and Node.js in Ukraine
Так он в конце массив отдает
источник

IS

Isayev Shamshod🎻 in NodeUA - JavaScript and Node.js in Ukraine
Честно говоря я тоже первый раз использую reduce в асинхронке
источник

ИМ

Илон Макс in NodeUA - JavaScript and Node.js in Ukraine
Просто еще обернуть в Promise.all
источник

АМ

Андрей Москаленко... in NodeUA - JavaScript and Node.js in Ukraine
но у него ж не массив промисов, в result же не Promise а значение, по идее cities надо просто эвейтить
источник

IS

Isayev Shamshod🎻 in NodeUA - JavaScript and Node.js in Ukraine
оказывается можно , в других моментах успешно выполняется
источник

АМ

Андрей Москаленко... in NodeUA - JavaScript and Node.js in Ukraine
перед этим await надо: sortedCountries.reduce
источник

AS

Alexey Shultsev in NodeUA - JavaScript and Node.js in Ukraine
cities у вас ничего не возвращает
Но самое смущающее - то, что вы асинхронную функцию передаёте в метод с синхронным контрактом
Мне кажется, что лучше через map преобразовать индексы в запрос getData по каждому индексу
Вы получите массив промисов, который передадите в Promise.all, ответы на каждый промис будут в том порядке, в каком вы их передали в Promise.all
источник

АМ

Андрей Москаленко... in NodeUA - JavaScript and Node.js in Ukraine
да, я бы тоже так делал, скорее всего редюсить тоже можно, но потом сложнее понять как оно работает )
источник

IS

Isayev Shamshod🎻 in NodeUA - JavaScript and Node.js in Ukraine
не работает
источник

АМ

Андрей Москаленко... in NodeUA - JavaScript and Node.js in Ukraine
а cities как вызывается ?
источник

AS

Alexey Shultsev in NodeUA - JavaScript and Node.js in Ukraine
const promises = sortedCountries.map((cityIdx) => {
 return getData(cityIdx);
});
const results = await Promise.all(promises);


Вроде такого
источник

IS

Isayev Shamshod🎻 in NodeUA - JavaScript and Node.js in Ukraine
без await
источник

АМ

Андрей Москаленко... in NodeUA - JavaScript and Node.js in Ukraine
так надо или с помощью .then что-то дальше делать или эвейтить, но вообще я бы переписал на map
источник