@fon_harry

Почем время выполения двух промисов последовательно эквивалетно времени паралельного выполнения?

Хочу выполнить два промиса последовательно, но результат времени как при параллельном выполнении. Что я делаю не так?
const getA = new Promise((resolve, reject) => {
    console.time('getA');
    setTimeout(() => {
        console.timeEnd('getA');
        resolve(4)
    }, 6000)
});

const getB = new Promise((resolve, reject) => {
    console.time('getB');
    setTimeout(() => {
        console.timeEnd('getB');
        resolve(2)
    }, 2000)
});


console.time('get sum');
getA.then(a => {
    getB.then(b => {
        console.log(`result: ${a + b}`);
        console.timeEnd('get sum');
        })
    });
  • Вопрос задан
  • 123 просмотра
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
результат времени как при параллельном выполнении

А почему как? Они у вас выполняются параллельно. Чтобы было последовательно - второй должен создаваться в then первого.

UPD. Вынесено из комментариев:

Получается что new Promise( уже запускает на выполнение код? Его можно как то отложить?

Можно сделать getA и getB функциями, возвращающими промисы - тогда будет как вы хотите:

const getA = () => new Promise((resolve, reject) => {
    console.time('getA');
    setTimeout(() => {
        console.timeEnd('getA');
        resolve(4)
    }, 6000)
});

const getB = () => new Promise((resolve, reject) => {
    console.time('getB');
    setTimeout(() => {
        console.timeEnd('getB');
        resolve(2)
    }, 2000)
});


console.time('get sum');
getA().then(a => {
    getB().then(b => {
        console.log(`result: ${a + b}`);
        console.timeEnd('get sum');
        })
    });


UPD. Cabac_B недоумевает в комментариях по поводу "выполняются параллельно":

Среда исполнения JS уже умеет параллельно?

Ну не буквально же параллельно, и не буквально выполняются - смотрите код, о котором идёт речь. Имелось в виду, что оба промиса ждут своего разрешения одновременно.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы