Организация последовательного вызова асинхронных функций

Сначала исправьте сами функции: их Promise должны завершаться через resolve, а third должен возвращать Promise. Затем последовательные await обеспечат порядок 1, 2, 3.

Короткий ответ

Что ответить на собеседовании

Сначала исправьте сами функции: их Promise должны завершаться через resolve, а third должен возвращать Promise. Затем последовательные await обеспечат порядок 1, 2, 3.

Подробный разбор

Ответ с пояснениями

Условие

Необходимо вызвать функции так, чтобы в консоли последовательно отобразились числа 1 2 3.


const getRandomArbitrary = (min, max) =>
    Math.floor(Math.random() * (max - min) + min);

const first = () => {
    return new Promise((resolve) => {
        setTimeout(() => console.log("1"), getRandomArbitrary(0, 3) * 1000);
    });
};

const second = () => {
    return new Promise((resolve) => {
        setTimeout(() => console.log("2"), getRandomArbitrary(0, 3) * 1000);
    });
};

const third = () => {
    new Promise((resolve) => {
        setTimeout(() => console.log("3"), getRandomArbitrary(0, 3) * 1000);
    });
};

Подумайте, какие подходы (callback‑цепочки, async/await, Promise‑композиция) позволят гарантировать порядок вывода независимо от случайных задержек.

Ответ

Сначала исправьте сами функции: их Promise должны завершаться через resolve, а third должен возвращать Promise. Затем последовательные await обеспечат порядок 1, 2, 3.

const printLater = value => new Promise(resolve => {
  setTimeout(() => {
    console.log(value);
    resolve();
  }, getRandomArbitrary(0, 3) * 1000);
});
const first = () => printLater(1);
const second = () => printLater(2);
const third = () => printLater(3);
async function run() {
  await first();
  await second();
  await third();
}
run().catch(console.error);

В исходнике resolve не вызывается ни разу; простое добавление await остановило бы цепочку после первого сообщения. Эквивалентная композиция: first().then(second).then(third). Promise.all здесь не подходит, поскольку запустил бы операции одновременно.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее