массив обещаний, содержащих Кассандра Queris не срабатывает хорошо - PullRequest
0 голосов
/ 19 ноября 2018

В настоящее время я пытаюсь заполнить таблицу cassandra содержимым файла xlsx, но столкнулся с проблемой.

Мне удалось создать массив со всеми запросами, необходимыми для заполнения моей таблицы.(«вставить в my_table (values ​​name, ...) values ​​(values, ...);»).Таким образом, мой массив получил около 7000 строк.

Затем я выполняю обещание, и в этом обещании я сделал цикл для заполнения и массив обещаний, чтобы вызвать первое обещание, когда все обещания закончены.

это код, который я сделал

index.js =>

const ImportFileContent = require("./scripts/import_file_content")
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
});


// ImportFileContent.importFileContent return an array of string, those strings contains all the 7000+ queries
ImportFileContent.importFileContent().then(queries => {
    InsertDb.clients(db, queries).then(result => {
        console.log(result);
         db.shutdown(function (err, result) {
        });
    });
});

insertDb.js =>

let DB = null;

module.exports = {
    ClientsLeasing: function (db, queries) {
        DB = db;
        return insertClientsLeasing(queries);
    }
}

function insertClientsLeasing(queries) {
    return new Promise((resolve, reject) => {
        let nbError = 0;
        let nbSuccess = 0;
        let promisesArray = [];
        //I made i <2000 here because my cassandra setup doesn't manage more than 2048 request in parallele
        for (let i = 0; i < 2000; i++) {
            promisesArray.push(new Promise(function (resolve, reject) {
                DB.execute(queries[i], function (err, result) {
                    if (err) {
                        nbError++;
                        reject(err)
                    } else {
                        nbSuccess++;
                        resolve();
                    }
                });
            }));
        }
        Promise.all(promisesArray).then((result) => {
            console.log("is over")
            console.log("over ===================== success => ", nbSuccess, "                    errors => ", nbError);
            resolve("success");
        }).catch((error) => {
            console.log(error);
            console.log("is over error")
            console.log("over ===================== success => ", nbSuccess, "                    errors => ", nbError);
            resolve("error");
        });

    });
}

Моя таблица получила два основныхзадает дату создания (которая теперь ()) и идентификатор клиента, который может быть в нескольких строках xlsx (что может быть источником проблемы?).

Так что теперь, когда я запускаю этот код, мойвывод enter image description here

, тогда, когда я делаю подсчет в таблице через cqls, я получаю только 1962 строки с этим выводом enter image description here

Мне кажется, что я что-то упускаю из-за того, что использую свои обещания.Я действительно не понимаю.

Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...