【问题标题】:Node.JS / JavaScript Async Call back issueNode.JS / JavaScript 异步回调问题
【发布时间】:2013-05-15 15:38:00
【问题描述】:

我正在尝试完成以下任务(应该是非常基本的,我一定遗漏了一些微不足道的东西):

  1. 使用带有 select 语句的字符串调用函数
  2. 等待数据库调用完成并返回行(或等效的 json)
  3. 填充 http 对象以返回

代码如下:

    util.js
exports.execute = function( query){
    if (connection) {
        connection.query(query, function(err, rows, fields) {
            if (err) throw err;
            console.log("from Util - " + JSON.stringify(rows));
            return JSON.stringify(rows);
        });
    }
};

repo.js
var q =  "select * from xxx";
    var response;
    util.execute(q,  function (err,  r){
            if (err){
                throw err;
                console.log(err);
            }
            else {
                console.log(r);
                res.contentType('application/json');
                res.write(r);
                res.end();
            }
        });

我的问题是,当调用 util.js 中的代码并且我可以在控制台中看到 json 时,它永远不会回到 repo.js 中的匿名回调函数。

我在这里做错了什么?

更新

谢谢本 我还在同一行找到了解决方案……这是新代码:

repo.js:
var send_data = function (req, res, r){
    res.contentType('application/json');
    res.write(r);
    res.end();

}
exports.all = function(req, res){
    var q =  "select * from XXX";
    var response;
    util.execute(req, res,q,  send_data);
};

util.js:
exports.execute = function(req, res,  query, callback){
    if (connection) {
        connection.query(query, function(err, rows, fields) {
            if (err) throw err;
            callback(req, res, JSON.stringify(rows))  ;
        });
    }
};

【问题讨论】:

    标签: node.js asynchronous callback anonymous-function


    【解决方案1】:

    util.execute 在您的代码中只接受一个参数。它需要接受第二个回调参数才能按照您的方式使用它。 (回调不是魔法,它们只是函数调用)

    类似:

    exports.execute = function(query,callback){
        if (connection) {
            connection.query(query, function(err, rows, fields) {
                if (err) throw err;
                console.log("from Util - " + JSON.stringify(rows));
                callback(null,JSON.stringify(rows));
            });
        }
    };
    

    如果您希望它的行为一致并接受错误参数,您可能需要填写:

    exports.execute = function(query,callback){
        if (connection) {
            connection.query(query, function(err, rows, fields) {
                callback(err,null);
                console.log("from Util - " + JSON.stringify(rows));
                callback(null,JSON.stringify(rows));
            });
        }
    };
    

    【讨论】:

      猜你喜欢
      • 2015-07-30
      • 2017-03-20
      • 2016-08-27
      • 2023-03-04
      • 1970-01-01
      • 1970-01-01
      • 2013-03-25
      • 2015-02-19
      • 1970-01-01
      相关资源
      最近更新 更多