循环中使用async await如何做到分段返回
刚接触Nodejs,想问下,我有一个循环去读取数据的function,数据量有几百万,我不知道具体多少,用了while(true){},读取到最后然后退出,我在循环里用了一个async ()=>{ await function() {return promise}} 如果这样,会爆掉V8内存,请问如何分段去保存数据到数据库?比如我想每50条就保存一次。谢谢。
11 回复
async () => {
await function() {
if (n > 10) {
await SaveToDataBase;
}
return promise
}
}
@wolfFN 问题应该不在保存数据这里,而是await要循环几百万次,会一直等待,直到V8内存爆掉。我的意思是想每循环一定数量的await就处理掉这部分取到的数据然后释放掉,再往下循环。
数据从哪里读的?另一个数据库?
有一种东西叫迭代器
const arr = [];
for(let i = 0;i < 1000000000000;i++)
{
const data = await doSomeThing();
arr.push(data);
if(i % 50 === 0 && i !== 0){
await db.save(data);
}
}
用yield,generator,自己写个自执行器。像co那种,不过这个自执行器有个计数器,累计50次后写入数据库,
来自酷炫的 CNodeMD
@cheetahhh 用superagent写了个函数从其他网站读取过来的。
@Fov6363 这个会一直在 await doSomeThing()这里等待1000000000000条数据才继续执行的
@Fov6363 不好意思好像是我将循环放在async外面了
@zswnew async await在typescript编译后就是转成yield的。
@nullcc 用generator写的迭代器吗?