函数不返回值:范围问题

时间:2014-07-01 00:22:56

标签: javascript node.js scope

需要第二双眼睛......发现有什么问题吗?我的内部函数没有返回值。我一定是搞乱了范围吗?

 function getGroups(account){
    var name;
   // name = 'assigned'; I work
    account.getGroups(function(err, groups) {
        //removed logic for simple debugging 
        name ='test';
        //return name;
    });
    return name;
}

在父函数中分配变量时,var name = 'assigned'可以正常工作。

2 个答案:

答案 0 :(得分:2)

account.getGroups可能是异步函数,它需要callback函数。这个callback函数,

function(err, groups) {
        //removed logic for simple debugging 
        name ='test';
        //return name;
    }

不会立即执行。因此,您的return name;语句会在name = 'test';语句之前执行。

希望它有意义。

<小时/> 要从回调中获取更新值,您必须使getGroups异步或基于事件

使异步变得容易

function getGroups(account, callback){
    var name;
   // name = 'assigned'; I work
    account.getGroups(function(err, groups) {
        //removed logic for simple debugging 
        name ='test';
        callback(name);
    });

}

而不是调用函数的值(例如,&#39; var groupname = getGroups(account)&#39;),您必须执行以下操作

getGroup(account, function (groupname){
   // do whatever you like with the groupname here inside this function
})

答案 1 :(得分:1)

由于account.getGroups是异步函数,因此您自己的getGroups也被强制为异步。而不是使用return语句返回名称,尝试将名称传递给回调:

function getGroups(account, onDone){
    account.getGroups(function(err, groups) {
        var name ='test';
        //...
        onDone(name);
    });
}

使用回调而不是return语句编写的代码据说是用延续传递样式编写的。如果您想要更多示例,可以谷歌。

您可能还想传递一个seconf&#34;错误&#34;如果要传播错误,则回调模拟Nodejs接口的参数。