Hallo Eugen,
async function erstePromiseFunction() {
return await new Promise((res, rej) => {
setTimeout(res, 1 * 1000);
});
}
Zu umständlich. Eine async-Funktion, um etwas zu awaiten und dann gleich zurückzugeben? Gib einfach das Promise zurück und fertig. Es sei denn, im real life™️ passiert da noch viel mehr…
function erstePromiseFunction() {
return new Promise((res, rej) => {
setTimeout(res, 1 * 1000);
});
}
function Abfolge()
Was Du da zeigst, ist aber keine Abfolge. Promise.all erwartet einen Schwarm von Promises und wartet auf alle gleichzeitig. Die Aktivitäten, die diese Promises irgendwann erfüllen, müssen vorher allesamt eingeleitet worden sein.
Wenn Du eine Abfolge willst, dass also die zweite Promise-Funktion anläuft, wenn die erste ihr Promise erfüllt, musst Du sie auch nacheinander aufrufen. Entweder über eine then-Kette, oder über mehrere awaits hintereinander.
Promise.all([erstePromiseFunction, zweitePromiseFunction])
übergibt keine Promises an Promise.all, sondern Funktionsobjekte. Diese werden nicht aufgerufen! Aus irgendwelchen mystischen Gründen akzeptiert Promise.all auch Nicht-Promises und kapselt sie der leichteren Handhabbarkeit wegen einfach in ein resolvtes Promise ein.
Bau mal console.log Aufrufe in erstePromiseFunction und zweitePromiseFunction ein - die wirst Du nicht zu sehen bekommen.
Du willst statt dessen dies:
Promise.all([erstePromiseFunction(), zweitePromiseFunction()])
Das ruft beide Funktionen auf. Sie erzeugen das Promise, starten dem Timer und kehren sofort zurück. Und Promise.all bekommt ein Array mit diesen Promises.
Zu deiner Frage:
Ist es irgendwie möglich, Promise.all eine Funktion und nicht ein Promise zu überreichen
Nein. Es erwartet ein Array aus Promises. Was willst Du mit deiner Funktion erreichen? Welches Problem willst Du eigentlich lösen?
Rolf
sumpsi - posui - obstruxi