当我尝试将值打印到由异步函数返回的控制台时,我得到了未定义。
这发生在我的控制器函数(dumyController.js
)中,该函数调用用辅助函数(DBHelper.js
)编写的函数,用于DRY方法,
异步从DBHelperModel.js
dumyController.js
var dbHelpers = require('../helpers/helpers');
exports.dumyControllerFunc = function (req, res) {
var result= dbHelpers.dumyHelperFunc(165);
console.log(result);
};
DBHelper.js
var dbHelp = require('../models/DBHelperModel');
module.exports = {
dumyHelperFunc: function (userId) {
dbHelp.fetchDataFromDB(userId, function (err, rows) {
var res;
if (err) {
return null;
}
else {
res.send(rows.member_code);
}
});
}
};
DBHelperModel.js
var db = require('../db');
var DBHelpers = {
fetchDataFromDB: function (userId, callback) {
var query = `SELECT member_code FROM members where id=?`;
db.query(query, userId, callback);
},
};
module.exports = DBHelpers;
db.js
var mysql = require('mysql');
var connection = mysql.createPool({
host: '127.0.01',
user: 'root',
password: '',
database: 'dumyDB'
});
module.exports = connection;
我知道由于函数的异步性,我没有获得价值,但任何人都可以告诉我如何使用上面给出的架构来获取值。我是nodeJS的新手。谢谢!
答案 0 :(得分:1)
我认为您需要有关nodejs中异步的解决方案。
except BaseException as e:
,无论如何,这是nodejs的一种方法,即本机nodejs的异步解决方案。 callback
是最值得推荐的,如果有一个asycn链,它具有良好的外观结构,promise
看起来很糟糕。
答案 1 :(得分:0)
这可能是您想要实现的目标: https://repl.it/MA0Z/0
var DBHelpers = {
fetchDataFromDB: function (userId, callback) {
callback(null, 'hello fetchDataFromDB');
},
};
var dbhelp = {
dumyHelperFunc: function (userId, callback) {
DBHelpers.fetchDataFromDB(userId, function (err, rows) {
if (err) {
callback('error bro');
} else {
callback(null, rows);
}
});
}
}
dbhelp.dumyHelperFunc(165, function (error, result) {
console.log(result);
});