Това е често срещана грешка сред начинаещите в 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 на нейно място.