Асінхронны код з калбэкамі ў JavaScript

Няхай у нас ёсць нейкая асінхронная функцыя:

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

Няхай мы выкарыстоўваем гэтую функцыю наступным чынам:

javascriptmake();
console.log('2'); // выканаецца першым

Няхай мы хочам зрабіць так, каб другі вывад у кансоль выканаўся пасля таго, як выканаецца асінхронная аперацыя ўнутры функцыі. Адным з падыходаў, якія выкарыстоўваюцца для гэтага, з'яўляецца выкарыстанне калбэка: абернем чакаючы код у ананімную функцыю і перададзім параметрам у функцыю make:

javascriptmake(function() {
  console.log('2');
});

Вядома ж, само па сабе гэта не вырашыць нашу задачу. Пакуль мы проста заключылі наступную ўмову: пры жаданні выканаць код пасля спрацоўвання make перадайце гэты код калбэкам у выклік make.

Выправім код функцыі make так, каб яна пачала працаваць у адпаведнасці з нашай умовай:

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

Раскажыце, у якім парадку выведуцца лікі ў кансоль:

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

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