Answer
t.me/js_testОтвет:
33000
Объяснение:
Функция getCar имитирует работу с сервером, в неё можно передать название машины и через какое-то время она вернёт стоимость этой машины. У нас есть массив машин cars и мы хотим получить сумму стоимости всех машин в этом массиве. Мы решили использовать метод map для обхода массива но проблема в том что сам метод map не является асинхронным, даже если объявлять функцию callback как асинхронную, внутри она всё равно вызовется как обычная. Тут и приходит на помощь метод Promise.all, нужно всего лишь завернуть код в него и метод map начнёт работать асинхронно.
Код:
const getCar = async (carName) => {
const price = new Map();
price.set("Tesla", 10000);
price.set("Dodge", 12000);
price.set("McLaren", 11000);
return new Promise((res) => {
setTimeout(() => {
res(price.get(carName));
}, 10 + Math.random() * 1000);
});
};
const cars = [{ name: "Tesla" }, { name: "Dodge" }, { name: "McLaren" }];
let carsPriseSum = 0;
const calcSum = async () => {
await Promise.all(
cars.map(async (car) => {
const result = await getCar(car.name);
carsPriseSum += result;
})
);
};
calcSum().then(() => {
console.log(carsPriseSum);
});