Javascript 为什么';是否将DB查询的移动结果推送到变量中?
意图 在我的路由中建立与数据库的连接,运行查询,捕获结果,并使索引视图可以访问它以在DOM中呈现 问题 DB在控制台中成功连接并返回结果。但是,无法将此结果推送到“finalResult”数组中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
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;