我正在尝试在sailsjs中编写一个控制器
module.exports = {
someFunction: function(req, res){
var userID = req.param('id')
User.findUserName(userID, function(err, receiverName){
if(err){
res.serverError(err);
}else{
ReceiverName = receiverName;
}
});
console.log("#####################################");
console.log(ReceiverName);
console.log("#####################################");
.
.
.
.
但是当我部署控制器时,重启sails应用程序并通过URL调用此函数,我在控制台上收到以下错误:
error: Sending 500 ("Server Error") response:
ReferenceError: ReceiverName is not defined
我试图将变量ReceiverName
声明为全局变量,但仍无法对其进行排序。我需要有关使其全局化的指导,以便在else
部分内为其赋值并在控制器内的任何位置使用它。
注1:
但是,当我使用代码在else
块内的控制台上打印变量的值时:
User.findUserName(userID, function(err, receiverName){
if(err){
res.serverError(err);
}else{
console.log("#####################################");
console.log(receiverName);
console.log("#####################################");
}
});
该值打印完美。
注2:
我已经在进行异步调用以检索receiverName
,因此从异步调用返回响应并不是一个疑问。我正在寻找将响应存储在可以进一步使用的变量中的方法。
答案 0 :(得分:3)
你的注释2有点令人困惑,所以我不确定你是否理解它在你的第一个例子中不起作用的原因是因为User.findUserName()
在执行你的{{1}之前还没有完成运行}}。
请记住,数据库调用是异步的。因此,您希望在该数据库调用中使用的任何值都必须在完成后运行。确保这一点的唯一方法是确保您的代码在回调中运行。
这就是第二个例子有效的原因。需要console.log()
变量的代码在回调中运行。试试这个,它和你的第二个例子差不多......
receiverName
你应该阅读Node.js,async和callbacks的编程模式。喜欢这个