В проекте Node.js я использую цикл for await of
с читаемым потоком в качестве источника данных, поэтому мой код концептуально выглядит следующим образом:
for await (const item of readableStream) {
// ...
}
Доступный для чтения поток существует до цикла, то есть он не создается для цикла, но он уже существует. Теперь дело в том, что я хотел бы иметь возможность прекратить слушать этот поток, то есть я хотел бы break
из цикла, но я не хочу закрыть читаемый поток.
Если я просто сделаю это:
for await (const item of readableStream) {
if (condition) {
break;
}
// ...
}
цикл останавливается, как и ожидалось, но поток закрывается. Как я могу добиться того же самого, без закрытия потока?
Я не могу использовать on('data')
напрямую, потому что действие, которое я хочу предпринять, включает в себя запуск функции async
, и, следовательно, это не будет работать. Я знаю, что я мог бы решить эту проблему с помощью потока Transform
или Writable
, но это, кажется, некоторые издержки, которых я бы хотел избежать.
Возможно ли то, что я хочу сделать с помощью петли for await of
, и если да, то как? Если нет, то какая моя лучшая альтернатива?