Четыре асинхронные операции запускаются сразу; каждая независимо завершается успехом или ошибкой после случайной задержки.
const doSomething = (ms) => {
Четыре асинхронные операции запускаются сразу; каждая независимо завершается успехом или ошибкой после случайной задержки.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
const doSomething = (ms) => { return new Promise((resolve, reject) => { setTimeout(() => { if (Math.random() <= 0.5) { reject("error"); } else { resolve(ms); } }, ms); }); };
const getDelay = () => { let rand = 1000 + Math.random() * 2000; return Math.floor(rand); };
const p1 = doSomething(getDelay()); const p2 = doSomething(getDelay()); const p3 = doSomething(getDelay()); const p4 = doSomething(getDelay());
Ответ
Четыре асинхронные операции запускаются сразу; каждая независимо завершается успехом или ошибкой после случайной задержки.
getDelay возвращает целое от 1000 до 2999 мс, но таймер может выполниться позже. Без обработчиков отклонения возможны unhandled rejections. Для сбора всех исходов подходит Promise.allSettled([p1, p2, p3, p4]); результат сохраняет входной порядок, а не порядок завершения.