Versprechen.alle in JavaScript: Wie man beheben Wert für alle verspricht?
Schrieb ich Folgendes node.js Datei:
var csv = require('csv-parser');
var fs = require('fs')
var Promise = require('bluebird');
var filename = "devices.csv";
var devices;
Promise.all(read_csv_file("devices.csv"), read_csv_file("bugs.csv")).then(function(result) {
console.log(result);
});
function read_csv_file(filename) {
return new Promise(function (resolve, reject) {
var result = []
fs.createReadStream(filename)
.pipe(csv())
.on('data', function (data) {
result.push(data)
}).on('end', function () {
resolve(result);
});
})
}
Wie Sie sehen können, ich benutze Promise.all
um zu warten, bis beide Operationen Lesen der csv-Dateien. Ich verstehe nicht, warum, aber wenn ich den code ausführen der Zeile 'console.log(result)'
ist nicht verpflichtet.
Meine zweite Frage ist, ich will, dass die callback-Funktion von Promise.all.then()
akzeptiert zwei verschiedene Variablen, wobei jede von Ihnen ist das Ergebnis der relevanten Versprechen.
InformationsquelleAutor CrazySynthax | 2016-11-16
Du musst angemeldet sein, um einen Kommentar abzugeben.
Erste Frage
Promise.all
nimmt ein array von versprichtÄndern:
(add
[]
um Argumente)Zweite Frage
Den
Promise.all
behebt eine Reihe von Ergebnissen für jede der Versprechen, die Sie an Sie übergeben.Bedeutet dies, können Sie extrahieren Sie die Ergebnisse in Variablen wie:
Können Sie ES6+ destructuring weitere Vereinfachung der code:
Kein problem, schauen Sie sich meine Bearbeiten
InformationsquelleAutor nem035
Antwort auf Ihre zweite Frage:
Wenn Sie möchten, dass die
then
Rückruf zur Aufnahme von zwei verschiedenen arguemnts, dann können Sie Bluebird und seinespread
Methode. Siehe:Statt
.then(function (array) { ... })
und dass ein Zugriff aufarray[0]
undarray[1]
im inneren desthen
handler, den Sie nutzen könnenspread(function (value1, value2) { ... })
und haben beide Variablen benannt, wie Sie wollen.Dies ist ein feature von Bluebird, es ist nicht möglich, mit einfachen
Promise
.Verwenden Sie Bluebird genauso wie Versprechen, z.B.:
Natürlich müssen Sie nicht haben, es zu benennen
P
aber was auch immer Sie wollen.Weitere Beispiele finden Sie in der Bluebird Cheatsheets.
Nein. Einen standard Versprechen, hat nur
then
was bekommt ein array zu Versprechen.alle.und wenn ich 'zu verbreiten', wie ist die Fehlerbehandlung begangen? Ich wollte nicht sehen, eine catch-Klausel in dem link.
Verwenden Sie
.spread(...).catch(...)
wie würden Sie.then(...).catch(...)
.Siehe die Bluebird cheatsheet
InformationsquelleAutor rsp