大家好!我的第一个应用需要帮助:
我正在创建一个以express + node.js为背景的应用程序。没有数据库。我使用的是具有某些功能的第三方解决方案,而不是进行计算。
50个对象。每个对象都有一个唯一值:随机数。开始时,我拥有所有这些对象,我需要为每个对象计算一些值,然后根据计算结果将其放置在表单上。
每个对象发送:axios.get('/calculations?value=uniqueValue')
,然后将结果累加到一个数组中。当array.length
等于50时,我将相互比较数组元素并定义每个对象的(x,y)坐标。之后,对象将出现在表单上。
let value = uniqueValue; // an unique value received from an object
let requests = [];
for (let i = 0; i < 1500; i++) { // this loop is necessary due to application idea
requests.push(calculateData(value)); // 3rd-party function
value += 1250;
}
let result = await Promise.all(requests);
let newData = transform(result); // here I transform the calculated result and then return it.
return newData
一个对象的计算花费700毫秒。所有50个对象的所有计算花费≈10秒。第三方功能只能同时接收一个值,但是工作非常迅速。但是循环for (let i = 1; i < 1500; i++) {…}
非常昂贵。
axios.get('/getSomething?params=something')
处于待处理状态。任何建议将不胜感激!
答案 0 :(得分:0)
You can make the call in chunks of data using async.eachLimit
var values = [];
for (let i = 0; i < 1500; i++) { // this loop is necessary due to application idea
values.push(value);
value += 1250;
}
var arrayOfItemArrays = _.chunk(values, 50);
async.eachLimit(arrayOfItemArrays, 5, eachUpdate, function(err, result){let
newData = transform(result);
return newData ;
});
function eachUpdate(req_arr, cb){
var result = []
req_arr.forEach(fucntion(item){
calculateData(item).then((x){
result.push(x);
});
cb(result);
}