Versuchen, einige moderne JS und insbesondere die ECMAScript 6 Promises zu lernen. Ich spiele mit diesem einfachen Test:Wie garantiere ich die Reihenfolge der Auflösung mehrerer Versprechen?
let slow = new Promise((resolve) => {
setTimeout(function()
{
\t console.log('slow');
\t resolve(); \t
}, 2000, 'slow');
});
let instant = new Promise((resolve) => {
\t console.log('instant');
\t resolve(); \t
});
let quick = new Promise((resolve) => {
setTimeout(function()
{
\t console.log('quick');
\t resolve(); \t
}, 1000, 'quick');
});
Promise.all([slow, instant, quick]).then(function(results) {
console.log('finished');
}, function(error) {
console.log(error); \t
});
Was ich hier wollen alle Versprechen zu starten ist async zugleich. Und log, wenn sie alle fertig sind. In der Konsole wird dies wie erwartet angezeigt: "instant", "quick", "slow" und "finished".
Was aber, wenn ich sicher gehen wollte, dass "instant" nicht echo/log, bevor "slow" abgeschlossen wurde? Das heißt, ich möchte, dass die Konsole "schnell", "langsam", "sofort" und "fertig" protokolliert, aber gleichzeitig müssen sie alle gleichzeitig mit async starten.
Wie kann ich das erreichen? mit Ihrem aktuellen Code
Versprechen Verkettungs, promise.all nicht –
Kette die Versprechungen mit .then() –
ich meine Frage aktualisiert haben, da würde das nicht bedeuten, dass die Versprechungen synchron laufen ? Ich brauche sie gleichzeitig, asynchron, was Promise.all mir gibt, glaube ich. Stellen Sie sich zum Beispiel vor, dass die 3 Versprechen einige Daten abrufen, aber ich muss sicher sein, dass die Daten in einer bestimmten Reihenfolge angezeigt werden. – Werner