CNode

循环中使用async await如何做到分段返回

问答
Hhuangsav发布于9 年前最后回复9 年前11 回复6310 浏览0 收藏

刚接触Nodejs,想问下,我有一个循环去读取数据的function,数据量有几百万,我不知道具体多少,用了while(true){},读取到最后然后退出,我在循环里用了一个async ()=>{ await function() {return promise}} 如果这样,会爆掉V8内存,请问如何分段去保存数据到数据库?比如我想每50条就保存一次。谢谢。

查看回复

回复 (11)

W
wolfFN#1·9 年前
async () => {
	await function() {
		if (n > 10) {
			await	SaveToDataBase;
		}
		return promise
	}
}
H
huangsav#2·9 年前
引用 wolfFN

@wolfFN 问题应该不在保存数据这里,而是await要循环几百万次,会一直等待,直到V8内存爆掉。我的意思是想每循环一定数量的await就处理掉这部分取到的数据然后释放掉,再往下循环。

C
cheetahhh#3·9 年前

数据从哪里读的?另一个数据库?

N
nullcc#4·9 年前

有一种东西叫迭代器

F
Fov6363#5·9 年前


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);
	}
}
Z
zswnew#6·9 年前

用yield,generator,自己写个自执行器。像co那种,不过这个自执行器有个计数器,累计50次后写入数据库,

来自酷炫的 CNodeMD

H
huangsav#7·9 年前
引用 cheetahhh数据从哪里读的?另一个数据库?

@cheetahhh 用superagent写了个函数从其他网站读取过来的。

H
huangsav#8·9 年前
引用 Fov6363`

@Fov6363 这个会一直在 await doSomeThing()这里等待1000000000000条数据才继续执行的

H
huangsav#9·9 年前
引用 Fov6363`

@Fov6363 不好意思好像是我将循环放在async外面了

H
huangsav#11·9 年前
引用 nullcc有一种东西叫迭代器

@nullcc 用generator写的迭代器吗?

参与回复
登录后即可参与回复。登录