【问题标题】:Returning variable value in sailsJS在sailsJS中返回变量值
【发布时间】:2015-10-27 09:38:01
【问题描述】:

我正在尝试用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,所以毫无疑问从异步调用返回响应。我正在寻找将响应存储在可以进一步使用的变量中的方法。

【问题讨论】:

  • var ReceiverName; 放在module.exports... 上方应该这样做
  • 我已经试过了,但没有成功!

标签: node.js sails.js


【解决方案1】:

您的注释 2 有点令人困惑,所以我不确定您是否理解它在第一个示例中不起作用的原因是因为在您执行 console.log() 之前,User.findUserName() 尚未完成运行。

请记住,数据库调用是异步的。因此,您想从该数据库调用中使用的任何值都必须在它完成后运行。确保这一点的唯一方法是确保您的代码在回调中运行。

这就是第二个示例有效的原因。需要receiverName 变量的代码在回调中运行。试试这个,它和你的第二个例子几乎一样......

User.findUserName(userID, function(err, receiverName){
    if(err){
        res.serverError(err);
    }else{
       doStuffWith(receiverName)
    }
});
var dostuffWith = function(ReceiverName){
    // all the code that you want to use ReceiverName should be in here.
    console.log("#####################################");
    console.log(ReceiverName);
    console.log("#####################################");    
}

您应该阅读一些关于 Node.js、异步和回调的编程模式。像这样

http://book.mixu.net/node/ch7.html

【讨论】:

  • 谢谢 :) 我曾经使用过类似的方法。它有效!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-09-03
  • 2013-09-03
  • 1970-01-01
  • 1970-01-01
  • 2012-09-08
  • 2012-10-10
  • 2013-09-03
相关资源
最近更新 更多