gpt4 book ai didi

node.js - 如何在嵌套 for 循环中调用异步函数而不耗尽内存?

转载 作者:太空宇宙 更新时间:2023-11-04 02:44:35 25 4
gpt4 key购买 nike

我有这样的代码:

for (var i in data) {
for (var j in data[i]) {
for (var k in data[i][j]) {
db.data.insert({i:i, j:j, k:k}, emptyCallback);
}
}
}

但是我的内存不足,因为它正在对所有插入进行排队。如何让 for 循环暂停直到插入完成?

我尝试将所有记录推送到一个数组中以便稍后插入,但是数组变得太大,我再次耗尽了内存。

最佳答案

每次调用回调时,您都需要迭代到下一个键,如下所示:

function get_first_keys(data, keys)
{
var ki = Object.keys(data);
for (var i = keys[0]; i < ki.length; ++i)
{
var kj = Object.keys(data[ki[i]]);
for (var j = keys[1]; j < kj.length; ++j)
{
var kk = Object.keys(data[ki[i]][kj[j]]);
for (var k = keys[2]; k < kk.length; ++k)
{
return [i, j, k];
}
}

}
}

function get_next_keys(data, keys)
{
var i = keys[0];
var j = keys[1];
var k = keys[2];

var ki = Object.keys(data);
var kj = Object.keys(data[ki[i]]);
var kk = Object.keys(data[ki[i]][kj[j]]);

if (k + 1 < kk.length)
return [i, j, k + 1];
if (j + 1 < kj.length)
return get_first_keys(data, [i, j+1, 0]);
if (i + 1 < ki.length)
return get_first_keys(data, [i+1, 0, 0]);
return;
}


var current_keys = get_first_keys(data, [0, 0, 0]);

function insert()
{
if (!current_keys)
return;
key = {};
key.i = Object.keys(data)[current_keys[0]];
key.j = Object.keys(data[key.i])[current_keys[1]];
key.k = Object.keys(data[key.j])[current_keys[2]];
db.data.insert(key, insert);
current_keys = get_next_keys(data, current_keys);
}


insert();

关于node.js - 如何在嵌套 for 循环中调用异步函数而不耗尽内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6337775/

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