gpt4 book ai didi

javascript - 在不结束底层流的情况下使用 break in for-await-of

转载 作者:搜寻专家 更新时间:2023-10-31 23:50:06 24 4
gpt4 key购买 nike

在一个 Node.js 项目中,我使用一个 for await of 循环和一个可读流作为数据源,所以我的代码在概念上看起来像这样:

for await (const item of readableStream) {
// ...
}

可读流存在于循环之前,即它不是为循环创建的,但它已经存在。现在的重点是我希望能够停止收听此流,即我想从循环中break,但我想要关闭可读流。

如果我只是这样做:

for await (const item of readableStream) {
if (condition) {
break;
}

// ...
}

循环按预期停止,但流关闭。如何在关闭流的情况下实现相同的目的?

我不能直接使用 on('data'),因为我要执行的操作包括运行 async 函数,因此这将不起作用.我知道我可以使用TransformWritable 流来解决这个问题,但这似乎是我想避免的一些开销。

for await of 循环是我想做的事情吗?如果可以,怎么做?如果不是,我最好的选择是什么?

最佳答案

可以通过使用 promisified 事件发射器监听 data 事件来实现此行为。

p-event为此目的支持异步迭代器:

const asyncIterator = pEvent.iterator(readableStream, 'data', {
resolutionEvents: ['finish']
});

for await (const item of asyncIterator ) {
if (condition) {
break;
}

// ...
}

关于javascript - 在不结束底层流的情况下使用 break in for-await-of,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55553770/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com