代码之家  ›  专栏  ›  技术社区  ›  lanetrotro

包含卡桑德拉·奎里斯的一系列承诺没有很好地触发

  •  1
  • lanetrotro  · 技术社区  · 7 年前

    我正在尝试用xlsx文件的内容填充cassandra表,但是我面临一个问题。

    我成功地完成了一个数组,其中包含填充表所需的所有查询(“insert into 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) {
            });
        });
    });
    

    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");
            });
    
        });
    }
    

    所以现在当我启动这个代码时,我的输出是 enter image description here

    然后,当我通过cqls在表中进行计数时,这个输出只得到1962行 enter image description here

    我觉得我在履行诺言的过程中遗漏了一些东西。我真的不明白。

    谢谢

    0 回复  |  直到 7 年前
    推荐文章