javascript-在node.js中一次迭代以50个项目为块的数组
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript-在node.js中一次迭代以50个项目为块的数组,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1824字,纯文字阅读大概需要3分钟。
内容图文
![javascript-在node.js中一次迭代以50个项目为块的数组](/upload/InfoBanner/zyjiaocheng/686/99e72c4f7c324e668ea8885933008de7.jpg)
我是node.js的新手,目前正在尝试对数组迭代进行编码.我有1000个项目的数组-由于服务器负载的问题,我想一次以50个项目的块为单位进行迭代.
我目前使用如下所示的forEach循环(希望将其转换为上述的块迭代)
//result is the array of 1000 items
result.forEach(function (item) {
//Do some data parsing
//And upload data to server
});
任何帮助将非常感激!
UPDATE(回复)
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个块.然后,您需要一个接一个地而不是一次发出请求.诺言可用于此目的.
考虑以下实现:
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 en error here
}
}
function uploadDataChunk(chunk) {
// return a promise of chunk uploading result
}
const dataArray = parseData();
uploadData(dataArray);
使用async / await将在后台使用promise,因此await将等待直到当前块被上传,然后才上传下一个(如果没有发生错误).
这是我对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
如果要异步更新所有块,并且在块上载后开始上载另一个,则可以通过以下方式进行:
function uploadDataChunk(chunk) {
return Promise.all(
chunk.map(uploadItemToGoogleCloud) // uploadItemToGoogleCloud should return a promise
);
}
内容总结
以上是互联网集市为您收集整理的javascript-在node.js中一次迭代以50个项目为块的数组全部内容,希望文章能够帮你解决javascript-在node.js中一次迭代以50个项目为块的数组所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。