2016-04-18 14 views
0

Ich verwende die http-Anfrage-Bibliothek got. Mit diesem Paket sind http-Verbindungen asynchron, schnell und einfach zu tippen. Die "" cha ist, dass ist ein Promisified-Paket, das mehrere Herausforderungen für mich bringt. Eine ist, dass ich nicht weiß, wie man eine Referenz an die weitergeben kann.Wie kann ich mehrere Versprechen asynchron mit einem einzelnen Callback in die Warteschlange stellen und ausführen?

Was ich tun muss, ist zusammen mit Datei Streams, um den Inhalt der Seite von mehreren URLs herunterladen. Nach Abschluss der alle dieser Streams möchte ich in den Code fortfahren.

In diesem Beispiel bekomme ich statt einer Reihe von Versprechungen eine Reihe von Antwortobjekten.

const getFile = (fileUrl) => { 
    return new Promise((resolve) => { 
    got.stream(fileUrl).pipe(fs.createWriteStream(path.basename(fileUrl))) 
    .on('finish',() => { 
     successMessage('downloaded ' + fileUrl + '!'); 
     resolve(); 
    }); 
    }); 
}; 

// create an array of these got promises 
let promises = [] 
for (let file of body.files) { 
    promises.push(getFile(file)); 
} 


Der Grund der getFile Helfer vorhanden ist, um die got in einem Versprechen zu wickeln, so dass nach all den got s durchgeführt wird, ich promise.all Aufruf verwenden:

// after all got's have executed 
promises.all(promises).then(() => { 
    console.log('all promises resolved'); 
} 

Suchen Sie nach Unterstützung, um zu verstehen, wie Sie das erste Snippet so ändern, dass promises.all sich wie erwartet verhält.

+2

Es ist 'Promise.all (verspricht)', aber anders als das sollte Ihr Code funktionieren. Was ist der Fehler? – Bergi

+1

Ich glaube, du hast gerade den Bug Bergi entdeckt. Ich würde diese Antwort posten, bevor jemand kommt und Ihre wohlverdienten Internet-Punkte stiehlt! – Acey

+0

@Bergi sollten Sie das als eine vollständige Antwort posten, es hat für mich funktioniert und Sie verdienen die richtige Antwort für diese. Vielen Dank! –

Antwort

1

Die Promise-Aggregationsfunktion heißt Promise.all() nicht promises.all().

Verwandte Themen