gpt4 book ai didi

javascript - NodeJS函数执行顺序

转载 作者:行者123 更新时间:2023-11-29 07:50:11 25 4
gpt4 key购买 nike

开始学习 Node 并尝试构建一个应用程序。

现在在我的路由文件中,我正在尝试连接到 mysql 并获取用户的专业,然后用它来做其他事情。但是,当我执行网页时,控制台显示第二个日志比第一个日志执行得早。我想这可能是因为 Node 是异步的?

exports.list = function(req, res){
req.getConnection(function(err,connection){
/* find user's major */
var user_major = (function() {
connection.query('SELECT major FROM user WHERE user_id=' + req.params.id, function (err, row) {
if (err) {
console.log("Error Selecting : %s ", err);
}
console.log('Test inside function: '+ row[0].major);
return row[0].major;
});
})();
console.log("Test outside: " + user_major);

res.render('main/main',{page_title:'USER MAJOR', data: user_major});
});
};

终端日志:

Test outside: undefined
GET /main/1 304 353.737 ms - -
Test inside function: COEN

最佳答案

正如其他人在评论中指出的那样,Node.js 是异步的。您不能只从函数返回数据,它必须在回调中返回。

我将其重写如下:

exports.list = function(req, res, next) {
req.getConnection(function(err, connection) {
if (err) return next(err);
/* find user's major */
var user_major = function(id, callback) {
connection.query('SELECT major FROM user WHERE user_id=' + id, function(err, row) {
if (err) {
return callback("Error Selecting : %s ", err);
}
callback(null, row[0].major);
});
};

user_major(req.params.id, function(error, major) {
if (error) return next(error);
res.render('main/main', {
page_title: 'USER MAJOR',
data: major
});
});

});
};

关于javascript - NodeJS函数执行顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26673390/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com