nodejs-无法保存异步函数返回的数据

时间:2017-10-03 12:16:48

标签: node.js express asynchronous

当我尝试将值打印到由异步函数返回的控制台时,我得到了未定义。

这发生在我的控制器函数(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的新手。谢谢!

2 个答案:

答案 0 :(得分:1)

我认为您需要有关nodejs中异步的解决方案。

  • promise,这是一种通用且受欢迎的解决方案
  • 使用except BaseException as e:,无论如何,这是nodejs的一种方法,即本机nodejs的异步解决方案。
  • 其他asysn:Generateasync,即es6功能,后者是nodejs7 +
  • 支持

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);
});