stream: Add option to `Readable.take` operator to not close the stream
Personne n'a encore pris cette issue.
- Langage dominant
- JavaScript
- Étoiles
- 122k
- Forks
- 37.3k
- Merge moyen
- 4 j 2 h
- PR mergées (30 j)
- 283
Description
What is the problem this feature will solve?
I will be able to do this:
const csvParsedStream = fs
.createReadStream('file.csv')
.compose(csvParse({ columns: false }));
const [columns] = await csvParsedStream
.take(1)
.toArray();
// This will now be empty and no data as take already consumed the stream
const parsed = await csvParsedStream
.map((row) => parseRowByColumns(row, columns))
.toArray();
Another example (I know I can use [first, ...rest] this is just an example):
const a = Readable.from([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]);
const [first] = await a.take(1).toArray();
console.log(first);
// [1]
const rest = await a.toArray();
console.log(rest)
// []
What is the feature you are proposing to solve the problem?
Adding closeStream option to the take operator that with default value true that I could disable closing the stream
const csvParsedStream = fs
.createReadStream('file.csv')
.compose(csvParse({ columns: false }));
const [columns] = await csvParsedStream
.take(1, { closeStream: false }) // Right now this would close the stream, but we give it an option to not
.toArray();
const parsed = await csvParsedStream.map((row) => parseRowByColumns(row, columns)).toArray();
What alternatives have you considered?
Get the first value from stream as async itarator and rest
let columns;
for await (const c of csvParsedStream.iterator<string[]>({ destroyOnReturn: false })) {
columns = c;
break;
}
const parsed = await csvParsedStream
.map((row) => parseRowByColumns(row, columns))
.toArray();
Guide de contribution
Ouvrir le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Piste de recherche
Commencez par l’opérateur Readable.take et comparez son comportement actuel de fermeture du flux avec l’alternative async iterator({ destroyOnReturn: false }) mentionnée. Examinez la discussion environnante sur l’API des flux et définissez l’achèvement comme la prise en charge de l’option closeStream proposée tout en préservant le comportement par défaut existant.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- javascript, node.js
- Domaine
- api, backend
- Type d'issue
- Fonctionnalité
- Difficulté
- 4/5
- Temps estimé
- 3-5 jours
- Activité
- Calme
- Clarté
- Plutôt claire
- Accessibilité débutants
- 45/100