# Асинхронный код с коллбэками в JavaScript

Пусть у нас есть некоторая асинхронная функция:

`function make() { setTimeout(function() { console.log('1'); }, 3000); }`

Пусть мы используем эту функцию следующим образом:

`make(); console.log('2'); // выполнится первым`

Пусть мы хотим сделать так, чтобы второй вывод в консоль выполнился после того, как выполнится асинхронная операция внутри функции. Одним из подходов, используемых для этого, является использование коллбэка: обернем ожидающий код в анонимную функцию и передадим параметром в функцию `make`:

`make(function() { console.log('2'); });`

Конечно же, само по себе это не решит нашу задачу. Пока мы просто заключили следующее соглашение: при желании выполнить код после срабатывания `make` передайте этот код коллбэком в вызов `make`.

Исправим код функции `make` так, чтобы она начала работать в соответствии с нашим соглашением:

`function make(callback) { setTimeout(function() { console.log('1'); // некая асинхронная операция, может не одна callback(); // затем наш коллбэк }, 3000); }`

Расскажите, в каком порядке выведутся числа в консоль:

<+javascript+> function make(callback) { setTimeout(function() { console.log('1'); callback(); }, 3000); } make(function() { console.log('2'); console.log('3'); }); <-javascript->
←→
↑
en ru