我需要从匿名函数加载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;... } };
答案 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"
}