Ich habe vor kurzem angefangen, Q.spawn
Funktion zu verwenden, um Generatoren zu laufen, die Versprechen versprechen. Dies funktioniert gut in Browsern, in denen die Unterstützung für Streams noch nicht gelandet ist, aber im Fall von Knoten haben wir Streams. Wenn Sie Streams in einer Generatorfunktion verwenden und nach dem Erstellen des Writer-Streams einen Ertrag erzielen möchten, wird Ihr Code nicht mehr so sauber.Ergiebige Ströme in Generatorfunktionen
Q.spawn(function*() {
yield new Promise(resolve => {
let fromStream = fs.createReadStream('x.txt');
let toStream = fs.createWriteStream('y.txt');
toStream.on('end',() => resolve());
fromStream.pipe(toStream);
});
});
Es funktioniert, aber sobald ich anfange, mit vielen Streams zu handeln, wird der Code wirklich hässlich. Kann dies so einfach wie das folgende Snippet gemacht werden ?.
someGeneratorFuncRunner(function*() {
yield fs.createReadStream('x.txt')
.pipe(fs.createWriteStream('y.txt'));
});
okay, aber was ich wirklich wissen wollen, ist, ob es möglich ist, einen Strom und den Läufer wandelt dann implizit den Strom in ein promi zu ergeben se. Das Problem, dem ich gegenüberstehe, ist 'someStream.pipe (outStream) .on ('end', => resolve())' scheint das Versprechen nicht zu lösen. Ich bin neu in Nodejs Streams. – Ajinkya
Ich denke nicht, dass Q in dieser Hinsicht erweiterbar ist wie Bluebird. Man könnte den eingebauten 'Stream.prototype' mit einer' then'-Methode erweitern, um Streams zu machen, die dann "rised" werden können, aber ich bin mir nicht sicher, ob das eine gute Übung wäre. – Bergi