Javascript 为什么';是否将DB查询的移动结果推送到变量中?

Javascript 为什么';是否将DB查询的移动结果推送到变量中?,javascript,mysql,arrays,node.js,express,Javascript,Mysql,Arrays,Node.js,Express,意图 在我的路由中建立与数据库的连接,运行查询,捕获结果,并使索引视图可以访问它以在DOM中呈现 问题 DB在控制台中成功连接并返回结果。但是,无法将此结果推送到“finalResult”数组中 doSomething(结果[0])成功地将结果推送到doSomething()函数中,因为console.log(results.name)返回正确的查询结果。finalResult.push(results.name)出现问题,因为console.log(finalResult)只返回一个包含“he

意图

在我的路由中建立与数据库的连接,运行查询,捕获结果,并使索引视图可以访问它以在DOM中呈现

问题

DB在控制台中成功连接并返回结果。但是,无法将此结果推送到“finalResult”数组中

doSomething(结果[0])
成功地将结果推送到
doSomething()
函数中,因为
console.log(results.name)
返回正确的查询结果。
finalResult.push(results.name)
出现问题,因为
console.log(finalResult)
只返回一个包含“hello”的数组,而该数组应该包含“hello”和查询结果。

将新数据推送到finalResult数组后,尝试在doSomething函数中写入console.log(finalResult)


我认为您只看到“helo”,因为console.log(finalResult)在doSomething函数完成之前(在您将数据添加到finalResult数组之前)执行

请注意,从mysql模块查询数据库时是同步的(查询以函数作为参数——回调)。这意味着您不能将结果值作为查询函数之外的变量。尝试使用async/await或promise获取返回值。

是的,这确实有效。虽然我还是很困惑。。如何让它先执行doSomething()?我希望能够将结果传递到res.render函数。您可以移动res.render。。。。。调用doSomething函数后立即调用connection.query函数,或者为res.rende添加一个函数,并在doSomething函数后立即调用此函数。
var express = require('express');
var router = express.Router();

router.get('/', function(req, res) {

// Establish Connection with Database
var mysql = require('mysql');
var connection = mysql.createConnection({
    host : '127.0.0.1',
    user : 'root',
    password : 'xxxxxxx',
    database : 'my_db'
});

connection.connect();

// // Query and post result to console
connection.query('SELECT * FROM products', function(error, results, fields) {
    if (error) throw error;
    doSomething(results[0]);
});

connection.end();


var finalResult = ['hello'];

function doSomething(results) {
    console.log(results.name);
    finalResult.push(results.name);
}

console.log(finalResult);


// Render/make accessible to views
res.render('index', {
    pageTitle: 'Home',
    result: finalResult
});
});

module.exports = router;