gpt4 book ai didi

javascript - 在 node.js 中一次遍历 50 个项目 block 中的数组

转载 作者:搜寻专家 更新时间:2023-10-31 23:40:25 24 4
gpt4 key购买 nike

我是 node.js 的新手,目前正在尝试编写数组迭代代码。我有一个包含 1,000 个项目的数组 - 由于服务器负载问题,我想一次以 50 个项目为一组进行迭代。

我目前使用如下所示的 forEach 循环(我希望将其转换为上述 block 迭代)

   //result is the array of 1000 items

result.forEach(function (item) {
//Do some data parsing
//And upload data to server
});

如有任何帮助,我们将不胜感激!

更新(响应回复)

async function uploadData(dataArray) {
try {
const chunks = chunkArray(dataArray, 50);
for (const chunk of chunks) {
await uploadDataChunk(chunk);
}
} catch (error) {
console.log(error)
// Catch en error here
}
}

function uploadDataChunk(chunk) {
return Promise.all(
chunk.map((item) => {
return new Promise((resolve, reject) => {
//upload code
}
})
})
)
}

最佳答案

你应该首先将你的数组分成 50 个 block 。然后你需要一个一个地发出请求,而不是一次。 Promise 可用于此目的。

考虑这个实现:

function parseData() { } // returns an array of 1000 items

async function uploadData(dataArray) {
try {
const chunks = chunkArray(dataArray, 50);
for(const chunk of chunks) {
await uploadDataChunk(chunk);
}
} catch(error) {
// Catch an error here
}
}

function uploadDataChunk(chunk) {
// return a promise of chunk uploading result
}

const dataArray = parseData();
uploadData(dataArray);

使用 async/await 将在幕后使用 promises,这样 await 将等待当前 block 上传,然后才上传下一个(如果没有发生错误)。

这是我对 chunkArray 函数实现的建议:

function chunkArray(array, chunkSize) {
return Array.from(
{ length: Math.ceil(array.length / chunkSize) },
(_, index) => array.slice(index * chunkSize, (index + 1) * chunkSize)
);
}

注意:此代码使用了 ES6 特性,因此最好使用 babel/TypeScript。

更新

如果您创建多个异步数据库连接,只需使用一些数据库池工具即可。

更新2

如果你想异步更新所有的chunk,当chunk上传完毕后开始上传另一个chunk,你可以这样做:

function uploadDataChunk(chunk) {
return Promise.all(
chunk.map(uploadItemToGoogleCloud) // uploadItemToGoogleCloud should return a promise
);
}

关于javascript - 在 node.js 中一次遍历 50 个项目 block 中的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46632327/

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