Bluebird Promise.all - mehrere Versprechen abgeschlossen aggregierende Erfolge und Ablehnungen

Jemand brachte einen interessanten Fall heute mit bluebird, was ist der beste Weg, um mehrere verspricht, wo wir sind nicht daran interessiert, zu stoppen auf eine bestimmte Erfüllung oder Ablehnung, sondern eher daran interessiert inspizierte das Ergebnis. Ein Beispiel:

var p1 = new Promise(function(f,r){
    setTimeout(function(){
        console.log("p1");
        f("yay");
    }, 100);

});

var p2 = new Promise(function(f,r){
    setTimeout(function(){
        console.log("p2");
        r(new Error("boo"));
    }, 200);

})

var p3 = new Promise(function(f,r){
    setTimeout(function(){
        console.log("p3");
        r(new Error("yay"));
    }, 300);

});

var p4 = new Promise(function(f,r){
    setTimeout(function(){
        console.log("p4");
        f("yay");
    }, 400);

});


//Promise.all([p1,p2, p3, p4]).then(function(p){
//   console.log("Results:",p);
//}).error(function(e){
//   console.log("Error:",e);
//});

Promise.map([p1,p2, p3, p4],function(p){
    console.log("results:",p);
}, {concurrency:10}).error(function(e){
    console.log("Error:",e);
});

Hier, wenn wir laufen entweder anzeigen oder alle abgelehnt verspricht verursachen Handler nicht zum Bericht über die Ergebnisse.

Beispielsweise die Ergebnisse der Ausführung Versprechen.Karte wie oben umgesetzt ist:

debugger listening on port 65222
p1
results: yay
p2
Error: [Error: boo]
p3
p4

Process finished with exit code 0

Hier der code für jedes Versprechen führt, aber nur 1 Ergebnis und 1 ein Fehler gemeldet wird. Den Fehler verursacht der Prozess beendet.

Wenn wir kommentieren .alle bekommen wir ein ähnliches Verhalten. Dieses mal, nur der Fehler gemeldet wird. Erfolge machen es nicht in dann (verständlicherweise).

debugger listening on port 65313
p1
p2
Error: [Error: boo]
p3
p4

Process finished with exit code 0

Gegeben, dieses Verhalten, was wäre der beste Weg zu gehen über die Implementierung von einem Szenario, in dem alle Verheißungen ausführen und die Ergebnisse der erfüllten Verheißungen berichtet mit jedem und alle Ablehnungen?

Etwas wie:

Promise.aggregate([p1,p2,p3,p4]).then(function(fulfilled, rejected){
    console.log(fulfilled); //all success
    console.log(rejected); //any and all rejections/exceptions
});

InformationsquelleAutor der Frage j03m | 2014-09-12

Schreibe einen Kommentar