Promise kann ich Dir nicht erklären, das raff' ich nicht in meiner derzeitigen Verfassung. Aber was eine Callback-Funktion ist, schon:
Eine solche bietet sich immer an, wenn sich damit die Datenerfassung von der Datenverarbeitung/Datenausgabe zweckmäßig trennen lässt. Beispiel SQL, Abfrage => Ausgabe:
Dem Abfrageprozess wird eine Referenz auf die Callbackfunktion übergeben. Jedesmal wenn der Abfrageprozess eine neue Zeile liefert, wird mit den Daten der jeweiligen Zeile die Callbackfunktion aufgerufen. Letzere schreibt dann die Zeile bspw. nach stdout oder in eine Datei.
Die Zweckmäßigkeit wird sofort klar, ist eine gepufferte Ausgabe. Des Weiteren muss der Abfrageprozess nicht auf den Ausgabeprozess warten, ja es kann durchaus vorkommen, das der Abfrageprozess längst beendet ist und der Ausgabeprozess noch läuft, die Prozesse werden entkoppelt.
MfG