需要第二双眼睛......发现有什么问题吗?我的内部函数没有返回值。我一定是搞乱了范围吗?
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'
可以正常工作。
答案 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接口的参数。