Asynchronní kód s callbacky v JavaScriptu

Předpokládejme, že máme nějakou asynchronní funkci:

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

Předpokládejme, že tuto funkci používáme následujícím způsobem:

javascriptmake();
console.log('2'); // provede se první

Předpokládejme, že chceme, aby se druhý výpis do konzole provedl až poté, co se dokončí asynchronní operace uvnitř funkce. Jedním z přístupů, které se k tomu používají, je použití callbacku: zabalíme kód, který má čekat, do anonymní funkce a předáme ji jako parametr funkci make:

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

Samozřejmě, samo o sobě to náš problém nevyřeší. Zatím jsme pouze uzavřeli tuto dohodu: při přání spustit kód po provedení make předejte tento kód jak callback při volání make.

Upravme kód funkce make tak, aby začala pracovat v souladu s naší dohodou:

javascriptfunction make(callback) {
  setTimeout(function() {
    console.log('1'); // nějaká asynchronní operace, nemusí být jen jedna
    callback();       // poté náš callback
  }, 3000);
}
Задание 1

Vysvětlete, v jakém pořadí se vypíšou čísla do konzole:

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

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