如何解决使用axios.all node.js发出大型10k发布请求时发生ETIMEDOUT
我正在使用axios.all一次打我所有的帖子。这是我的代码
=INDEX(Table2[[#All],[fastener]],AGGREGATE(15,6,IFERROR(ROW(Table2[fastener])/(([@diameter]>=Table2[min])*([@diameter]<=Table2[max])),ROW(Table2[fastener])/([@diameter]<=Table2[min])),1))
这可以很好地处理1000的数据大小。但是当数据大小为1000时,我会收到etimedout错误。请为此提供任何解决方案。我尝试将http agentalive设置为true,但没有用。
解决方法
我通过一次发出50个请求来解决该问题,直到总数达到50k。如果有人使用axios遇到问题,那么这里就是我的代码。
let start = new Date();
let count = 0;
const chunkSize = 50;
let limit = chunkSize;
let skip = 0;
console.log('Inserting excel data in chunks');
function recursiveFun() {
skip = chunkSize * count;
count++;
limit = chunkSize * count;
console.log('skip',skip);
console.log('limit',limit);
const chunkedData = data.slice(skip,limit);
let chunkUrls = [];
chunkedData.forEach(inventory => {
const userData = {
stream: stream_name,key: inventory.serialNumber,address: address,data: inventory,};
const postRequest = axios.post(
`${blockchain_service_url}/publishExcelData`,userData,);
chunkUrls.push(postRequest);
});
axios
.all(chunkUrls)
.then(
axios.spread(async (...responses) => {
const inventoryData = responses.map(
response => response.data,);
// use/access the results
console.log(inventoryData.length);
console.log(inventoryData[0].transactionId);
InventoryModel.insertMany(inventoryData,(err,res) => {
if (err) {
console.log(err.errmsg);
} else
console.log(
'Number of documents inserted into mongo: ' +
res.length,);
});
if (limit !== data.length) {
recursiveFun();
} else {
console.log(
'Insertion of excel sheet data is completed. Time Taken in seconds - ',(new Date() - start) / 1000,);//Insertion of excel sheet data is completed. Time Taken to post and insert 50k records in seconds - 585.385
}
}),)
.catch(errors => {
// react on errors.
console.error(errors);
});
}
recursiveFun();
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。