gpt4 book ai didi

javascript - 异步并等待许多对象的数组,即超过 1000 个

转载 作者:行者123 更新时间:2023-11-30 19:40:40 26 4
gpt4 key购买 nike

我有超过 1000 个具有这些属性的对象数组,例如:

常量 empArr = [{empName: 'sds',empId: 'e3',dob: '22-12-2',.. 很快}];

我已经使用 promise.all(promises) 尝试了问题陈述,但我想更有效地做到这一点。所以,我需要一些帮助

function makeDBInsert(empArr) {
const dbArr = [];
const promises = [];
const LEN = empArr.length;

/** this function returns promise containing emp age **/
function getEmpAge(empId) {
return db.execute('select age from emp where "empId" = ?', [empId]);
}

for (let i = 0; i < LEN; i += 1) {
const obj = {
name: empArr[i].empName,
empId: empArr[i].empId
}
promises.push(getEmpAge(obj.empId);
dbArr.push(obj);
}

return Promise.all(promises).then((empDetail) => {
const dbObj = empDetail.map((emp, i) => {
return {
dbArr[i].age: emp.age
}
});
return db.insert('insert into emp ("name", "id", "age") values ('?', '?', '?');', Object.values(obj));
}).catch(err => console.error(err));
}

所以,这里的 empArr 数组中有 1000 多个对象。在这里,我从数据库中获取 emp age,它返回包含 emp id 的 promise 。我正在使用 promise.all 来完成这项工作,如果不使用 promise.all 然后进行迭代,是否有更好的方法?提前致谢。

注意:请忽略代码中的语法错误。我在这里的目的只是描述我的问题陈述。

最佳答案

我得到了解决方案,即一个循环执行所有操作,例如使用 IIFE、异步等待、无 promise.all 和迭代 promises 响应。

async function makeDBInsert(empArr) {
const modifiedArr = [];

function getEmpAge(empId) {
return db.execute('select age from emp where "empId" = ?', [empId]);
}


await (function doDBCalls() {
empArr.forEach(async (item, i) => {
/* getEmpAge(param) is DB call */
const res = await getEmpAge(item.empId);
modifiedArr.push({modified: res.age });
// modify the object here and batch insert
});
})();
}

关于javascript - 异步并等待许多对象的数组,即超过 1000 个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55440041/

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