Answer

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);
});

Report Page