问题是
因此,我有this code,一个Readable流,它逐页地从de DB读取移动,但由于某种原因,我得到了重复的记录。
const readMovements = new Readable({
async read() {
while (true) {
const movements = await getMovements(page, perPage);
if (movements.length) {
const data = JSON.stringify(movements);
page++;
this.push(data);
} else {
break;
}
}
this.push(null);
},
});
我的解决方案
然后我changed this,Readable变成了下面的异步生成器,不再有重复的记录
async function* readMovements() {
while (true) {
const movements = await getMovements(page, perPage);
if (!movements.length) break;
const data = JSON.stringify(movements);
page++;
yield data;
}
}
我的问题
有人知道为什么会这样吗?
- 我想继续使用可读流,因为异步生成器代码运行速度比第一个版本慢。所以如果你有办法让它工作,请让我知道!
1条答案
按热度按时间zfycwa2u1#
原因是每次资源准备好读取更多数据时都会调用
read()
方法,因此,每次调用read()
时都会运行while循环(因此会出现重复调用)。通过创建一个类似于
#registered
的内部属性并使用它来确保循环只运行一次来解决这个问题。