5

我对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,它会记录该值,但这没有用作在其他函数中用于获取值的函数。

如果我能获得修改功能的帮助,我会很高兴。

4

1 回答 1

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 代替它。

于 2012-11-13T17:35:11.420 回答