在for..in循环中使用WebSocket.send-太多事件发射器

时间:2018-06-28 07:56:17

标签: javascript node.js websocket

我收到以下错误:

(node) warning: possible EventEmitter memory leak detected. 11 listeners added. Use emitter.setMaxListeners() to increase limit.

我使用节点js和websockets,websockets的目的是在将行插入我的sqlite3数据库期间制作了一个加载栏。

这是我的代码示例:

     howMany = myDaneLenght
wss.on('connection', function connection(ws) {
        ws.on('message', function incoming(message) {
            console.log('Client: ', message);
        });

        ws.on('error', function (err) {
            console.error('Found error: ' + err);
            next(err);
        });

        for (let item in dane) {
            db.serialize(function (err) {
                if (err) next(err);
                let stmt = db.prepare("INSERT INTO xxx (xxx, xxx, xxx, xxx...) VALUES (?,?,?,....?)");

                let changeDate = new Date(dane[item].Data).toLocaleDateString();
                let changeTermin = new Date(dane[item].Termin).toLocaleDateString();

                stmt.run(changeDate, dane[item].xxx, dane[item].xxx.trim(), dane[item].xxx.trim(), dane[item].xxx.trim(), xxx.......);
                stmt.finalize(function () {
                    result = parseInt(result) + 1;
                    ws.send('Inserting row number: ' + result + ' out of: ' + howMany);
                });
            });
        };

        //Closing db
        db.close(function () {
            console.log((Date.now() - start) + "ms");

            //Closing websocket(?)
            wss.close(function (err) {
                if (err) next(err);
            });
        });
    });

最重要的是错误不会总是触发!

例如,如果我第二次或第三次触发插入g,则会引发错误。

我认为是这条线造成的:

ws.send('Inserting row number: ' + result + ' out of: ' + howMany);

但出于在css / js中制作加载栏的目的,我需要在客户端上提供此信息。

有人可以帮助我解决该错误吗?我该如何解决?

  • 在sqlite3中插入大约600行需要大约1-2分钟

0 个答案:

没有答案