Я в настоящее время анализирую файл и получаю его данные, чтобы вставить их в мою базу данных.Для этого я сделал массив запросов и выполняю их через цикл.
Проблема в том, что я ограничен 2048 параллельными запросами.
Это код, который я сделал:
index.js =>
const ImportClient = require("./scripts/import_client_leasing")
const InsertDb = require("./scripts/insertDb")
const cassandra = require('cassandra-driver');
const databaseConfig = require('./config/database.json');
const authProvider = new cassandra.auth.PlainTextAuthProvider(databaseConfig.cassandra.username, databaseConfig.cassandra.password);
const db = new cassandra.Client({
contactPoints: databaseConfig.cassandra.contactPoints,
authProvider: authProvider
});
ImportClient.clientLeasingImport().then(queries => { // this function parse the data and return an array of query
return InsertDb.Clients(db, queries); //inserting in the database returns something when all the promises are done
}).then(result => {
return db.shutdown(function (err, result) {});
}).then(result => {
console.log(result);
}).catch(error => {
console.log(error)
});
insertDb.js =>
module.exports = {
Clients: function (db, queries) {
DB = db;
return insertClients(queries);
}
}
function insertClients(queries) {
return new Promise((resolve, reject) => {
let promisesArray = [];
for (let i = 0; i < queries.length; i++) {
promisesArray.push(new Promise(function (resolve, reject) {
DB.execute(queries[i], function (err, result) {
if (err) {
reject(err)
} else {
resolve("success");
}
});
}));
}
Promise.all(promisesArray).then((result) => {
resolve("success");
}).catch((error) => {
resolve("error");
});
});
}
Я пробовал несколько вещей, например добавление функции ожидания, которая устанавливает тайм-аут в моем дляцикл каждые x секунд (но он не работает, потому что я уже в обещании), я также пытался с p-queue
и p-limit
, но, похоже, он тоже не работает.
I 'Я вроде застрял здесь, я думаю, что упускаю что-то тривиальное, но я не понимаю, что.
Спасибо