Closed. This question needs to be more focused。它当前不接受答案。
想改善这个问题吗?更新问题,使其仅通过editing this post专注于一个问题。
2年前关闭。
在这种情况下,我需要将大量数据分类到不同的存储桶中。如果已经有某个数据类型的存储桶,则将其推入其中,但是如果遇到的数据类型是新的,我需要为其创建一个新的存储桶,这需要一个数据库查询。从理论上讲,这很好。但是,我的问题是在循环继续之前需要进行数据库查询,以便将来的数据可以插入该存储桶中。如何暂停循环直到函数完成?
我已经尝试过loop and callback approach并获得了所需的控制流,但是数据太大,并且我堆栈溢出。有没有其他方法可以解决此控制流程?
编辑:添加了代码,如人们建议的承诺。它实际上运行良好,但仅在数据点8428处停止。据我所知,数据点并不特殊,并且所有存储桶均已在该点创建,因此不会创建新的存储桶。它只是停止。有任何想法吗?也许我怎么称呼next()却错过了一个案例?
想改善这个问题吗?更新问题,使其仅通过editing this post专注于一个问题。
2年前关闭。
在这种情况下,我需要将大量数据分类到不同的存储桶中。如果已经有某个数据类型的存储桶,则将其推入其中,但是如果遇到的数据类型是新的,我需要为其创建一个新的存储桶,这需要一个数据库查询。从理论上讲,这很好。但是,我的问题是在循环继续之前需要进行数据库查询,以便将来的数据可以插入该存储桶中。如何暂停循环直到函数完成?
我已经尝试过loop and callback approach并获得了所需的控制流,但是数据太大,并且我堆栈溢出。有没有其他方法可以解决此控制流程?
编辑:添加了代码,如人们建议的承诺。它实际上运行良好,但仅在数据点8428处停止。据我所知,数据点并不特殊,并且所有存储桶均已在该点创建,因此不会创建新的存储桶。它只是停止。有任何想法吗?也许我怎么称呼next()却错过了一个案例?
async function sortData(data, images, i) {
let uuidList = [];
//This loop will wait for each next() to pass the next iteration
for (var j = 0; j < data.length; ++j) {
await new Promise(next=> {
let pos = uuidList.map(function(e) { return e.uuid; }).indexOf(data[j].uuid);
if(pos < 0){
Instance_Type.findInstance(data[j]._instance_type, function(err, instance){
/* add new bucket here */
if(itemsProcessed == images.length) {
processBuckets(uuidList, threshold, function(){
console.log("Bucket finished");
dataPackage.push({
imageName: images[i].name,
uuidList: uuidList,
});
++itemsProcessed;
if(itemsProcessed == images.length){
console.log("Rendering!");
res.render('data', {
dataPackage: dataPackage
});
}
});
}
next();
});
} else {
/*push to existing bucket here*/
if(itemsProcessed == images.length) {
processBuckets(uuidList, threshold, function(){
console.log("Bucket finished");
dataPackage.push({
imageName: images[i].name,
uuidList: uuidList,
});
++itemsProcessed;
console.log(itemsProcessed);
if(itemsProcessed == images.length){
console.log("Rendering!");
res.render('data', {
dataPackage: dataPackage
});
}
});
}
next();
}
})
}
}
最佳答案
您是否尝试过异步等待。
对于异步功能,您可以等待在案例数据库调用中返回的承诺,一旦解决,您就可以移至下一个。请仔细阅读其他参考资料,它将对您的事业有所帮助。
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/await