Parallele Vorgänge mit Versprechen.alle?

Ich bin zu der Annahme geführt, dass Versprechen.alle führt alle Funktionen, die Sie übergeben, die parallel und kümmert sich nicht, was um die zurückgegebenen verspricht fertig stellen.

Aber wenn ich Schreibe diesen test-code:

function Promise1(){
    return new Promise(function(resolve, reject){
        for(let i = 0; i < 10; i++){
            console.log("Done Err!");
        }
        resolve(true)
    })
}

function Promise2(){
    return new Promise(function(resolve, reject){
        for(let i = 0; i < 10; i++){
            console.log("Done True!");
        }
        resolve(true)
    })
}

Promise.all([ 
    Promise1(),
    Promise2()
])
.then(function(){
    console.log("All Done!")
})

Den Ergebnissen, die ich bekommen, ist dies

Done Err!
Done Err!
Done Err!
Done Err!
Done Err!
Done Err!
Done Err!
Done Err!
Done Err!
Done Err!
Done True!
Done True!
Done True!
Done True!
Done True!
Done True!
Done True!
Done True!
Done True!
Done True!
Done!

Aber wenn Sie parallel laufen, würde ich nicht erwarten, dass Sie die zur gleichen Zeit ausführen und geben Sie mir ein Ergebnis wie dieses?

Done Err!
Done True!
Done Err!
Done True!
Done Err!
Done True!
Done Err!
Done True!
Etc. Etc.?

Oder bin ich etwas fehlt in der Art, wie ich bin, es zu tun?

Das Versprechen Körper synchron ausgewertet.
Also, wenn eines der Versprechen wurden zu gehen und bekommen etwas aus einer Datenbank und anderen waren, sagen, abrufen von Daten aus einer web-API, die es tun würde, asynchron, aber alles, was ich gesagt, es zu drucken auf dem Bildschirm geschieht in der Reihenfolge, die ich angegeben in dem array?
Es hat nichts zu tun mit Promise.all. Wenn Sie erstellen ein Versprechen, das der Funktion übergeben wird sofort ausgewertet, so dass der Körper von Promise1 ausgeführt wird, bevor Sie überhaupt anrufen Promise2 oder Promise.all. Javascript ist nicht multi-threaded, so dass Sie Ihre for Schleifen wird niemals überschneiden mögen.
Hier ein Beispiel, wie Promise.all funktioniert. Das verspricht der start in der Reihenfolge, wie Sie entstanden sind, aber Sie laufen parallel.
Mögliche Duplikate von Node.js native Versprechen.alle Verarbeitungen parallel oder sequentiell?. Beachten Sie, dass ein Versprechen nicht machen, ein synchron-loop "parallel" oder "asynchrone" von sich, es hilft nur zum darstellen eines bereits asynchrone Sache (wie Datenbank-Abfragen, web-api-Aufrufe oder timeouts).

InformationsquelleAutor Steve | 2017-03-13

Schreibe einen Kommentar