Есть табличный сервис Airtable (а-ля Excel), с возможностью записи строк в таблицу через API. Нужно вкатить в этот сервис построчно 10 000 строк из коллекции
Data. Есть ограничения API в 10 запросов/сек. Я выполняю это размещение через конструкцию вида (setTimeout/setInterval):
Data.forEach(function(item,index){
setTimeout(function(){
API.sendData(item);
});
});
Проблема в том, как я это понимаю, что forEach быстро отрабатывает всю коллекцию и заталкивает в память эту чреду функций (или еще каким-то образом её планомерно и полностью выедает). В итоге мне не хватает для передачи 20Мб базы данных в 10000 записях 1.5Gb имеющейся серверной памяти и приложение падает и/или не отрабатывает коллекцию, это тоже не очень понятно: чья тут вина - моя или API дает сверху timeout и мои запросы висят дольше.
Мне кажется, что вышеприведенная конструкция просто не подходит для такого рода задачи и, наверняка, вы с подобным могли столкнуться в своем опыте. Нужен совет и настовление. Спасибо.
UPD: Код API и ответ сервера
Code
var Airtable = require('airtable');
var app = new Airtable({ apiKey: 'YOUR_API_KEY' }).app('appMzaconT6Iw9A3g');
app('Categories').create({
"Category name": "Social Innovation",
"Number of Orgs.": " 59",
"CatID": "bf5c955e6f68da36e5021d3962c28325",
"Last update": "2015-03-11T09:08:44.000Z"
}, function(err, records, newOffset) {
if (err) { console.log(err); return; }
records.forEach(function(record) {
console.log(record);
});
});
Output
{
"id": "rec00GC0bR7Eh1bGv",
"fields": {
"Category name": "Social Innovation",
"Number of Orgs.": " 59",
"CatID": "bf5c955e6f68da36e5021d3962c28325",
"Last update": "2015-03-11T09:08:44.000Z"
}
}