使用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();