从presenter方法中的执行函数返回json对象

时间:2013-09-02 14:46:11

标签: node.js sails.js

我需要从匿名函数加载json对象到变量 instance

在此示例中,实例未定义。

我确信,解决方案很简单,但节点中的新手并没有找到答案...... :(

module.exports = {
    create: function(req,res){
        instance = EngineInstance.findById(req.body.engineInstanceId).exec(function(err,instance){
            if (err) return res.send(err,500);
            if (!instance) return res.send("No engine instance found!", 404);
            return instance;
        });
        namespamce = instance.namespace;...
    }
};

2 个答案:

答案 0 :(得分:1)

您对异步代码的工作原理有一个非常普遍和基本的误解。完全停止。去阅读教程并做指导练习。上面的findById之类的异步IO使用CALLBACKS来调用带有结果变量的函数。它不使用RETURN VALUES,因为它们由于异步代码执行的顺序而无用。

module.exports = {
    create: function(req,res){
        instance = EngineInstance.findById(req.body.engineInstanceId).exec(function(err,instance){
            if (err) return res.send(err,500);
            if (!instance) return res.send("No engine instance found!", 404);
            //it is useless to return a value from this anonymous async callback
            //nothing will receive it. It will be ignored.
            //probably something like this is what you need
            req.namespamce = instance.namespace;
        });
        //do NOT put code here that needs req.namespace. This code runs BEFORE
        //the `findById` I/O callback runs.
    }
};

答案 1 :(得分:0)

更改了MYSQL查询以一起查询多个内容,而不是隔离accessPoint的查询并添加了此代码:

results[0].accessPoint = JSON.parse(results[0].accessPoint)
res.send(results[0]);

现在我把它拿回来了,这正是我想要的:

"accessPoint": {
    "mode": "client",
    "rate": 0,
    "ssid": "RMG",
    "signal": 0,
    "channel": 0,
    "password": "",
    "username": "example@aol.com"
  }