J'utilise une bibliothèque, ya-csv , qui attend un fichier ou un flux en entrée, mais j'ai une chaîne.
Comment convertir cette chaîne en un flux dans Node?
J'utilise une bibliothèque, ya-csv , qui attend un fichier ou un flux en entrée, mais j'ai une chaîne.
Comment convertir cette chaîne en un flux dans Node?
Comme @substack m'a corrigé en #nœud, la nouvelle API de flux dans le Nœud v10 rend cela plus facile:
var s = new stream.Readable();
s._read = function noop() {}; // redundant? see update below
s.push('your text here');
s.push(null);
... après quoi vous pouvez librement pipe , il ou sinon de le passer à votre clientèle cible.
Ce n'est pas aussi propre que le resumer one-liner, mais il le fait d'éviter le supplément de dépendance.
(Mise à jour: dans v0.10.26, un appel à l' push
directement à partir de la RÉPLICATION de l'invite de collision avec un not implemented
d'exception si vous n'avez pas configuré _read
. Il ne tombe pas en panne à l'intérieur d'une fonction ou d'un script. Si l'incohérence rend nerveux, comprennent l' noop
.)
N'utilisez pas de Jo Liss de resumer réponse. Il fonctionne dans la plupart des cas, mais dans mon cas, il m'a perdu un bon 4 ou 5 heures de bugs. Il n'est pas nécessaire pour les modules tiers pour ce faire.
NOUVELLE RÉPONSE:
var Readable = require('stream').Readable
var s = new Readable
s.push('beep') // the string you want
s.push(null) // indicates end-of-file basically - the end of the stream
Ce doit être entièrement conforme Lisible flux. Voir ici pour plus d'informations sur la façon d'utiliser les flux correctement.
VIEILLE RÉPONSE: Utilisez simplement le natif de Relais de flux:
var stream = require("stream")
var a = new stream.PassThrough()
a.write("your string")
a.end()
a.pipe(process.stdout) // piping will work as normal
/*stream.on('data', function(x) {
// using the 'data' event works too
console.log('data '+x)
})*/
/*setTimeout(function() {
// you can even pipe after the scheduler has had time to do other things
a.pipe(process.stdout)
},100)*/
a.on('end', function() {
console.log('ended') // the end event will be called properly
})
Notez que le "proche" de l'événement n'est pas émis (ce qui n'est pas requis par le flux d'interfaces).
Créez simplement une nouvelle instance du module stream
et personnalisez-la en fonction de vos besoins:
var Stream = require('stream')
var stream = new Stream()
stream.pipe = function(dest) {
dest.write('your string')
}
stream.pipe(process.stdout) // in this case the terminal, change to ya-csv
ou
var Stream = require('stream')
var stream = new Stream()
stream.on('data', function(data) {
process.stdout.write(data) // change process.stdout to ya-csv
})
stream.emit('data', 'this is my string')
Pour convertir une chaîne de caractères à un flux de données, vous pouvez utiliser une pause par le biais de flux:
through().pause().queue('your string').end()
Exemple:
var through = require('through')
// Create a paused stream and buffer some data into it:
var stream = through().pause().queue('your string').end()
// Pass stream around:
callback(null, stream)
// Now that a consumer has attached, remember to resume the stream:
stream.resume()
Mise à jour: @substack tout juste de publier un resumer du module. C'est comme une pause par le biais de() stream, mais auto-reprend le stream sur nextTick, le forum personne d'autre n'est en pause en attendant:
var resumer = require('resumer')
var stream = resumer().queue('your string').end()
// Now pass `stream` around. No need to resume, it happens automatically.
L' resumer().queue('some string').end()
idiome est ma méthode préférée pour créer ad-hoc flux de maintenant. C'est beaucoup plus pratique car vous pouvez l' return
ruisseaux, et ils aurons toujours repris.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.