【发布时间】:2026-01-25 19:25:02
【问题描述】:
我有一个像这样的对象:
let myObject = {
'db1': [db1_file1Id,db1_file2Id,db_1file3Id],
'db2': [db2_file1Id, db2_file2Id]
...
}
我遍历这个对象并在每次迭代中:我连接到数据库,检索文件,做一些事情并将文件保存回来。基本上是异步的东西。
for (let prop in myObject) {
if (myObject.hasOwnProperty(prop)) {
doStuff(prop, myObject[prop]);
}
}
现在 doStuff 函数确保我有一个本地范围,因此没有不一致。但是,由于每个循环内的异步操作,执行仍然不是同步的。在继续下一个之前,我基本上需要一个数据库被完全处理。我该如何解决这个问题?
我想到的一种方法是使用递归循环。但根据我的理解,这将需要我广泛地改变我的数据结构,这在 imo 中是次优的。
let arr; //containing my data
process(x) {
if (x < arr.length){
//process(x+1) is called inside doStuff after asynchronous operations are complete
doStuff(arr[x]);
}
}
【问题讨论】:
-
@leaf 您可以使用递归或 Array.prototype.reduce 从数组创建串行承诺链。我添加为答案。
-
您想按特定顺序处理数据库吗?
-
@leaf 排序无所谓
-
如果顺序无关紧要,那为什么还要序列化呢?下一个 db 函数是否需要前一个的输出?
-
@HRM 预防任何类型的服务器超载
标签: javascript loops asynchronous promise synchronization