我对nodejs很新,并且有一个问题。
尝试创建一个函数,该函数将调用我从表中提及其ID的任何字段的值:
function getUserInfo (userID, dynamicField) {
var query = connection.query('SELECT '+dynamicField+' from users WHERE userID = '+connection.escape(userID));
query.on('result', function(row) {
return(row.dynamicField);
});
};
console.log(getUserInfo(8, userEmail)) //this should get me the userEmail value of the user with userID=8
然而,我得到“未定义”。如果我使用console.log而不是return,它会记录该值,但这不能用作在其他函数中使用的函数来获取值。
如果我可以获得修改功能的帮助,我将很高兴。
答案 0 :(得分:11)
这是async / nodejs初学者中常见的错误。你基本上在同步函数中包含了一个异步函数,它打破了节点事件循环的本质。返回表达式需要用回调替换。见下文:
// Method
function getUserInfo (userID, dynamicField, callback) {
var query = connection.query('SELECT '+dynamicField+' from users WHERE userID = '+connection.escape(userID));
query.on('result', function(row) {
callback(null, row.dynamicField);
});
};
// Implementation
getUserInfo(8, userEmail, function(err, result){
console.log(err || result);
});
按照惯例,在Nodejs中,我们总是首先在回调中传递一个错误对象。在这种情况下,由于没有要捕获的错误,我们在其位置传递null。