callback返回值但是apears是未定义的

0 javascript callback node.js

我是节点和回调的新手.我试图将一个组列表拆分成一个数组.这些组用逗号分隔或用" - "分隔.最后一个意味着它是一个间隔,所以如果有22-25则意味着:22,23,24,25.我尝试了以下代码.

var groups = ["13-16","21-24","33"];
var splitgroups = function(groups, callback){
   var result = [];
   console.log(groups.length);
   for(var i=0; i<groups.length; i++){
     var cbr = callback(groups[i]);
     result = result.concat(cbr);
   }
  return result;
}

var handlegroupinterval = function(group){
  var temparr = [];
  try {
    temparr = group.split('-');
  }
  catch(err) {
    console.log(err.message);
  }
  console.log("groups split: "+group);
  if(temparr.length>1){
      var lowerbound = parseInt(temparr[0]);
      var upperbound = parseInt(temparr[1]);  
      temparr = [];
      for(var j=lowerbound; j<=upperbound; j++){
        temparr.push(j);
      }  
  }    
  return temparr;
}
var tempgroups = splitgroups(groups, function(res){handlegroupinterval(res)});
console.log("end: " +tempgroups);
Run Code Online (Sandbox Code Playgroud)

当我在"返回temparr"上设置断点时,我得到了正确的值.但是在第一个函数中,结果是未定义的.有人知道这个问题吗?

Mat*_*ari 5

你不是return来自回调.

只需更换

var tempgroups = splitgroups(groups, function(res){handlegroupinterval(res)});
Run Code Online (Sandbox Code Playgroud)

var tempgroups = splitgroups(groups, function(res){ return handlegroupinterval(res); });
Run Code Online (Sandbox Code Playgroud)

注意return在回调中添加了.

另外,我认为你可以进一步简化这一点

var tempgroups = splitgroups(groups, handlegroupinterval);
Run Code Online (Sandbox Code Playgroud)