Asynchroner Code mit Callbacks in JavaScript
Nehmen wir an, wir haben eine asynchrone Funktion:
function make() {
setTimeout(function() {
console.log('1');
}, 3000);
}
Nehmen wir an, wir verwenden diese Funktion wie folgt:
make();
console.log('2'); // wird zuerst ausgeführt
Nehmen wir an, wir möchten erreichen, dass die zweite
Ausgabe in die Konsole erst ausgeführt wird, nachdem
der asynchrone Vorgang
innerhalb der Funktion abgeschlossen ist.
Einer der Ansätze, die dafür verwendet werden,
ist die Verwendung von Callbacks:
Wir wickeln den zu erwartenden Code in eine anonyme Funktion
und übergeben sie als Parameter an die Funktion make:
make(function() {
console.log('2');
});
Allein dadurch wird unsere Aufgabe natürlich
nicht gelöst. Bislang haben wir nur die folgende
Vereinbarung getroffen: Wenn Sie Code nach dem
Auslösen von make ausführen möchten,
übergeben Sie diesen Code
als Callback im Aufruf von make.
Korrigieren wir den Code der Funktion make so,
dass sie beginnt, gemäß unserer
Vereinbarung zu funktionieren:
function make(callback) {
setTimeout(function() {
console.log('1'); // irgendein asynchroner Vorgang, vielleicht nicht nur einer
callback(); // dann unser Callback
}, 3000);
}
Erklären Sie, in welcher Reihenfolge die Zahlen in der Konsole ausgegeben werden:
function make(callback) {
setTimeout(function() {
console.log('1');
callback();
}, 3000);
}
make(function() {
console.log('2');
console.log('3');
});