在for loop MySQL Node.js内切换数据库,切换速度不够快/重叠?

在for loop MySQL Node.js内切换数据库,切换速度不够快/重叠?,mysql,node.js,express,Mysql,Node.js,Express,在Node.js中切换数据库(所有数据库都位于同一个连接上)时出现问题 这里是我的代码: Db.js设置(可能不重要,但认为应该包括它): 但是,输出如下所示: RowDataPacket { 'Database()': 'new' } RowDataPacket { 'Database()': 'tss' } RowDataPacket { 'Database()': 'tss' } RowDataPacket { 'Database()': 'tss' } RowDataPacket {

在Node.js中切换数据库(所有数据库都位于同一个连接上)时出现问题

这里是我的代码:

Db.js设置(可能不重要,但认为应该包括它):

但是,输出如下所示:


RowDataPacket { 'Database()': 'new' }
RowDataPacket { 'Database()': 'tss' }
RowDataPacket { 'Database()': 'tss' }
RowDataPacket { 'Database()': 'tss' }
RowDataPacket { 'Database()': 'tss' }
[
  [ RowDataPacket { parameter_value: '1' } ],
  'new',
  [ RowDataPacket { parameter_value: '1' } ],
  'joeys',
  [ RowDataPacket { parameter_value: '1' } ],
  'rvw',
  [ RowDataPacket { parameter_value: '1' } ],
  'sfx',
  [ RowDataPacket { parameter_value: '1' } ],
  'tss'
]
以上只是它随机选择的众多变化之一,所有时间都是可以进行第一次切换的,但如果成功或失败,以下切换是随机的。我究竟该如何修复这个错误。我已经花了好几天的时间在这上面了,我快发疯了。有人请帮忙


编辑:自2020年5月27日起,我有一个临时解决方案,但仍在寻找解决方案,以了解发生这种情况的原因和解决方法。

与其切换,为什么不保持两个连接,并使用一个函数返回用于给定任务的连接?你在这里操作一个全局变量,这是一个糟糕的形式。我不知道怎么做,你能详细说明或显示一些代码吗。而且,它不只是两个连接,它的连接可能会超过50个或100个,这取决于这个应用程序的规模有多大。每个端点都有一个打开的连接池,并有一个签出和返回连接的功能。还要注意在应该在
schoolCode
的位置执行类似于
`${schoolCode}`
的操作。不需要一个包含一个东西的模板字符串。嘿,伙计们,我改变了设置,这样它就可以为每个数据库创建一个新的连接,现在它可以正常工作了。所有这些数据库连接都存储在一个对象中,我可以使用
schoolCode
进行引用。它现在可以工作了,只是想知道这是否是做事情的正确方法,而不是切换,为什么不保持两个连接并使用一个函数来返回用于给定任务的连接?你在这里操作一个全局变量,这是一个糟糕的形式。我不知道怎么做,你能详细说明或显示一些代码吗。而且,它不只是两个连接,它的连接可能会超过50个或100个,这取决于这个应用程序的规模有多大。每个端点都有一个打开的连接池,并有一个签出和返回连接的功能。还要注意在应该在
schoolCode
的位置执行类似于
`${schoolCode}`
的操作。不需要一个包含一个东西的模板字符串。嘿,伙计们,我改变了设置,这样它就可以为每个数据库创建一个新的连接,现在它可以正常工作了。所有这些数据库连接都存储在一个对象中,我可以使用
schoolCode
进行引用。它现在起作用了,只是想知道这是否是正确的做事方式
app.get('/getMatModes', function(req, res){

    assure_api.query("SELECT client_id FROM license", (err, result) => {
        if(err){
            throw err;
        }
        else {
            let schools = result;
            let temp = schools
            schools = [];


            for(let i=0; i < temp.length; i++){
                schools.push(temp[i].client_id)
            }


            let matModes = [];

            async.forEachOf(schools, function(dataElement, i, inner_callback){
                let query = `SELECT parameter_value FROM parameter_data where parameter_name='maintenance_mode'`
                let schoolCode = dataElement;
                dbConnections[tenantTable[`${schoolCode}`]].query(`USE ${schoolCode}`, () => {

/*this is the line trying to debug which database is being looked at, because the values being 
returned in the query below were just simply wrong.*/
                    dbConnections[tenantTable[`${schoolCode}`]].query(`SELECT Database()`, (err, result) => {
                        console.log(result[0])
                    })
                        dbConnections[tenantTable[`${schoolCode}`]].query(query, (err, result) => {
                            if(err){
                                inner_callback(err)
                            }
                            else {
                                matModes.push(result, schoolCode)
                                inner_callback(null)
                            }



                        })
                    })

            },
            function(err){
                if(err){
                    throw err;
                }
                else{
                    console.log(matModes)
                }
            }
            )







        }
    })




})
RowDataPacket { 'Database()': 'new' }
RowDataPacket { 'Database()': 'joeys' }
RowDataPacket { 'Database()': 'rvw' }
RowDataPacket { 'Database()': 'sfx' }
RowDataPacket { 'Database()': 'tss' }
[
  [ RowDataPacket { parameter_value: '1' } ],
  'new',
  [ RowDataPacket { parameter_value: '1' } ],
  'joeys',
  [ RowDataPacket { parameter_value: '0' } ],
  'rvw',
  [ RowDataPacket { parameter_value: '0' } ],
  'sfx',
  [ RowDataPacket { parameter_value: '1' } ],
  'tss'
]

RowDataPacket { 'Database()': 'new' }
RowDataPacket { 'Database()': 'tss' }
RowDataPacket { 'Database()': 'tss' }
RowDataPacket { 'Database()': 'tss' }
RowDataPacket { 'Database()': 'tss' }
[
  [ RowDataPacket { parameter_value: '1' } ],
  'new',
  [ RowDataPacket { parameter_value: '1' } ],
  'joeys',
  [ RowDataPacket { parameter_value: '1' } ],
  'rvw',
  [ RowDataPacket { parameter_value: '1' } ],
  'sfx',
  [ RowDataPacket { parameter_value: '1' } ],
  'tss'
]