Von dem, was ich von Promise.all Dokumentation verstehe, ist es möglich, zwei oder mehr Funktionen gleichzeitig auszuführen und warten, bis alle von ihnen abgeschlossen sind. Also habe ich versucht, dieses:So machen Sie Javascript Promise.all Spaß funktioniert gleichzeitig
function execute(id, max) {
console.log('starting ' + id);
console.time(id);
var sum = 0;
for(var i = 0; i < max; i ++) {
sum += i;
}
console.timeEnd(id);
return sum;
}
console.log("Declaring p1");
var p1 = Promise.resolve(() => execute("p1", 10000));
console.log("Declaring p2");
var p2 = Promise.resolve(() => execute("p2", 100000));
console.log("Calling Promise.all");
console.time("all");
Promise.all([p1, p2]).then((values) => console.log("Then: " + values));
console.timeEnd("all");
Doch was ich habe (in Chrome ausgeführt wird), war dies:
Declaring p1
Declaring p2
Calling Promise.all
all: 0.599ms
Then:() => execute("p1", 10000),() => execute("p2", 100000)
So offenbar nicht nur die Funktionen wurden nicht so gut läuft, wie die then
Methode, sie bekam , nicht die Ergebnisse.
Auch wenn ich die Versprechungen der ursprünglichen Funktionen ersetzen ruft ich das gleiche Ergebnis hatte:
function execute(id, max) {
console.log('starting ' + id);
console.time(id);
var sum = 0;
for(var i = 0; i < max; i ++) {
sum += i;
}
console.timeEnd(id);
return sum;
}
console.log("Calling Promise.all");
console.time("all");
Promise.all([() => execute("p1", 10000),() => execute("p2", 100000)])
.then((values) => console.log("Then: " + values));
console.timeEnd("all");
Der Ausgang war:
Calling Promise.all
all: 0.274ms
Then:() => execute("p1", 10000),() => execute("p2", 100000)
Also, ich glaube, dass ich die Promise.all
Nutzung mißverstanden. Wie führe ich die Parallelverarbeitung mit Promises durch?
Danke,
Rafael Afonso
Es ist möglich, zwei ** asynchrone ** Funktionen gleichzeitig auszuführen und deren Ergebnisse abzuwarten. Ihre Schleifen sind nicht asynchron. – Bergi
Können Sie mir ein Beispiel geben? Möchten Sie sagen, die Versprechen innerhalb der Funktion zu verwenden? –
Er sagt, dass Promises Code nicht asynchron ausführen; Sie führen asynchronen Code aus. Möglicherweise suchen Sie in der Familie [Web Worker] (https://developer.mozilla.org/en/docs/Web/API/Worker) nach etwas für echte Parallelität. – Scott