Код, который агрегирует поступающие данные из readable stream или, наоборот, записывает данные во writable stream может быть записан компактно, используя возможности асинхронных итераторов (ES2018). Вот пример из статьи. В нём с помощью конструкции
for await ... of считывается текст из readable stream и записывается в переменную result:async function readableToString(readable) {
let result = '';
for await (const chunk of readable) {
result += chunk;
}
return result;
}Выглядит очень элегантно. В статье ещё есть хороший пример трансформации стримов с помощью асинхронных генераторов.
В общем, рекомендую почитать, даже если не работаете много с Node.js.
#js #nodejs #async
https://2ality.com/2019/11/nodejs-streams-async-iteration.html