gpt4 book ai didi

javascript - 同步迭代javascript对象

转载 作者:行者123 更新时间:2023-11-30 08:24:35 24 4
gpt4 key购买 nike

我有一个像这样的对象:

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]);
}
}

最佳答案

您可以使用您在最后使用 Object.entries(obj) 提出的解决方案。例如,

let arrProps = Object.entries(myObject);

process(index) {
if (index < arrProps.length){
// Call the callback once you complete execution of doStuff
doStuff(arrProps[index], () => process(index + 1));
}
}

在 doStuff 内部:

function doStuff(props, callback) {
// Process props
//finally in the promise of async call, on success call
.then(callback)
}

或者,如果您想使用 for ... in 循环,您可以使用生成器函数。

关于javascript - 同步迭代javascript对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47725420/

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