Читать книгу Angular - Manfred Steyer - Страница 50
Callbacks und die Pyramide of Doom
ОглавлениеAnders als klassische Operationen liefern asynchrone Operationen nicht unmittelbar ein Ergebnis. Stattdessen stoßen sie häufig eine registrierte Funktion – einen sogenannten Callback – an, sobald das asynchron ermittelte Ergebnis vorliegt:
setTimeout(() => {
console.log('Timeout!');
}, 1000);
In diesem Fall wird der Callback in Form eines Lambda-Ausdrucks übergeben. Der zweite Parameter gibt an, nach welcher Zeitspanne setTimeout den Callback ausführen soll. Hier wird dieser Wert auf 1000 Millisekunden festgelegt.
Leider sind asynchrone Operationen schwer zu lesen, zumal die JavaScript-Engine sie nicht sequenziell ausführt. Im Fall von
setTimeout(() => {
console.log('Timeout!');
}, 1000);
console.log('Start!');
ergibt sich zum Beispiel die Ausgabe Start! und Timeout!, obwohl sich die Reihenfolge der beiden Ausgaben im Quellcode genau andersherum gestaltet.
Noch unleserlicher wird es, wenn Callbacks weitere asynchrone Operationen anstoßen:
setTimeout(() => {
console.log('Phase 1');
setTimeout(() => {
console.log('Phase 2');
setTimeout(() => {
console.log('Phase 3');
setTimeout(() => {
console.log('Phase 4');
}, 1000);
}, 1000);
}, 1000);
}, 1000);
Hier ergeben sich nach jeweils 1.000 Millisekunden die Ausgaben Phase 1, Phase 2, Phase 3 und Phase 4.
Bei Codestrecken wie dieser ist auch von der Pyramide of Doom die Rede – zu Deutsch etwa »Pyramide der Verdammnis«. Diese Bezeichnung bezieht sich auf die Form der Einrückungen auf der linken Seite.
Um Quellcode dieser Art zu vermeiden, wurden die sogenannten Promises entwickelt. Der nächste Abschnitt geht auf sie ein.