Hallo dedlfix,
Bei einem sofort erfüllten Promise wird wohl auch ein direkt danach ausgeführtes then() sofort ausgeführt werden
Das habe ich auch mal geglaubt, aber es stimmt nicht. Der then-Callback ist immer asynchron und wird als Microtask ausgeführt (d.h. sobald der JavaScript-Stack leer ist - das ist nicht das gleiche wie „fertig mit dem aktuellen Event“). Das ist auch gut so, denn andernfalls wäre die Ausführungsreihenfolge deines Codes ggf. vom Timing des Promise-Callback abhängig, und das wäre ganz schwer zu testen.
Hast Du den verlinkten Blog-Beitrag von Jake Archibald angeschaut? Da ist ein sehr schönes Beispiel (abgesehen von der Tatsache dass er ein div click-able macht).
Kleineres Beispiel:
function logValue(v) { console.log("logging " + v); }
console.log("Promise 1");
Promise.resolve(1).then(logValue);
console.log("Promise 2");
new Promise((good,bad) =>
good(2))
.then(logValue);
console.log("Promise 3");
new Promise((good,bad) =>
setTimeout(() => { logValue(3000); good(3); }, 1000) )
.then(logValue);
console.log("Fertig!");
Die Ausgabe in einem Spec-konformen Browser ist:
Promise 1, Promise 2, Promise 3, Fertig!, logging1, logging 2, (kurze Pause), logging 3000, logging 3
Einige ältere Browser sind nicht Spec-konform, die machen das ggf. nicht richtig. Jake Archibald hat in seinem Blog Chrome, FF, Safari und Edge verglichen, und alle außer Chrome waren falsch. Der Blog ist aber schon 2 Jahre alt, die heutigen Versionen von FF und Edge machen es richtig (gestern Abend getestet). Safari habe ich nicht da.
Rolf
sumpsi - posui - clusi