Wie Sie warten, Versprechen zu beenden, bevor die Funktion zurückkehrt

Grundlegende Versprechen Frage:

JS:

console.log('Promise START');

function makeFullJSON(time) {
  return new Promise((resolve, reject) => {
    setTimeout(resolve, time, [time]);
  })
}

var p1 = makeFullJSON(1000);
var p2 = makeFullJSON(500);
var p3 = makeFullJSON(750);

p1.then(array => {
  console.log('Promise 1 complete', array);
});

p2.then(array => {
  console.log('Promise 2 complete', array);
});

p3.then(array => {
  console.log('Promise 3 complete', array);
});

Promise.all([p1, p2, p3]).then(arrayOfAllResolvedValues => {
  console.log('Array of resolved values:', arrayOfAllResolvedValues);
});

console.log('Promise END');

Den code Ausgabe:

Promise START
Promise END
Promise 2 complete [ 500 ]
Promise 3 complete [ 750 ]
Promise 1 complete [ 1000 ]
Array of resolved values: [ [ 1000 ], [ 500 ], [ 750 ] ]

Wie haben Sie den code umzuschreiben, so dass die Ausgabe lautet:

Promise START
Promise 2 complete [ 500 ]
Promise 3 complete [ 750 ]
Promise 1 complete [ 1000 ]
Array of resolved values: [ [ 1000 ], [ 500 ], [ 750 ] ]
Promise END
  • klingt wie ein Duplikat von: stackoverflow.com/q/14220321/497418.
  • Legen Sie einfach die Versprechen ENDE console.log neben den aufgelösten Werte ein?
  • Promise.all([p1, p2, p3]).then(() => console.log('Promise END'))
  • Sie können nicht immer die Ursache der interpreter in Javascript zu "warten" für jede asynchrone operation. Stattdessen, Sie tun, was Sie immer tun, in irgendeiner single-threaded event-driven Systems - Sie einen Rückruf registrieren, um benachrichtigt zu werden, wenn der Vorgang erledigt ist und Sie Ihre Arbeit durchzuführen in diesem callback. Sie nicht "warten" in Javascript.
  • Vielen Dank an alle. Ich Stimme mit der Rückruf-Benachrichtigung. Das scheint der einzige Weg für jetzt (bis ich an die Verwendung async-await-pattern).
InformationsquelleAutor S. Vaghar | 2017-03-09
Schreibe einen Kommentar