在我的情况下,为什么不对共享的mysql连接使用.end()不能停止脚本?

时间:2019-09-13 18:21:20

标签: mysql arrays node.js mongodb asynchronous

我目前正在编写一个节点脚本,以将简单的MongoDB表移动到MySQL。当前,数据已完全移动,但是我无法弄清楚如何正确终止连接,因此无法正确编写脚本。

我已尝试在脚本的许多部分中使用pool.close(),它会抱怨在上载数据时池已关闭,或者仍然保持打开状态且不完整。

我还尝试过使用Promises在函数完成后关闭,但是我的背景既不是JavaScript也不是异步的,所以我很肯定我的实现不正确。

当前,我建立了mongodb连接:

function grabFromMongo(tableName) {
  var mongoArray = {
    rawMongoData: function() {
      return MongoClient.connect(url, {
        useNewUrlParser: true,
        useUnifiedTopology: true
      }).then(function(db) {
        var dbo = db.db("delta");
        var collection = dbo.collection(tableName);
        return {
          collection: collection.find().toArray(),
          db: db
        };
      }).then(function(items) {
        return {
          collection: items.collection,
          db: items.db
        };
      });
    }
  };
  return mongoArray;
}

然后在mongo调用中上传数据,本质上是:

function siteTable(pool) {
  pool.query(`DROP TABLE IF EXISTS temp_site;`)
  pool.query(`CREATE TABLE temp_site (
      site_id INT UNIQUE, _id VARCHAR(50), id TEXT, site TEXT);`);
  var siteIn = grabFromMongo("site");
  siteIn.rawMongoData().then(function(items) {
    items.collection.then(function(entry) {
      for (var i = 0; i < entry.length; i++) {
        pool.query(`INSERT INTO temp_site (site_id,
            _id, id, site) VALUES (
              '${i+1}', '${entry[i]._id}', '${entry[i].id}',
              '${entry[i].site}');`);
      }
    });
  }, function(err) {
    console.error(err, err.stack);
  })
}

我希望我需要在pool.end()之外的某个地方打电话给siteTable,但是我一生无法准确诊断放置它的位置,承诺或其他方式。

0 个答案:

没有答案