You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

await未获取返回值:async递归函数调用后变量为undefined求助

为什么我的async递归函数返回undefined?

我一眼就看到问题所在了——你的递归调用那一行没有return结果!

先看你原代码的最后部分:

if (description == 'Test1' || description == 'Test2'){ 
  return eltern; 
} 
eltern = await getEltern(eltern.CategoryId); 

当第一次不满足if条件时,你确实调用了递归的getEltern,也把结果赋值给了eltern,但你没有把这个最终拿到的eltern返回出去。async函数如果没有显式的return语句,默认会返回Promise.resolve(undefined),这就是为什么你调用后得到的是undefined。

修正方案

只需要在递归调用的时候加上return,或者在赋值后return变量,两种写法都可以:

写法1:直接return递归调用的结果

async function getEltern(id){ 
  var eltern = await getTreeById(id); 
  var description = eltern.Descriptions.CategoryDescription; 
  description = (description.length > 1) ? description[0].Description: description.Description; 
  if (description == 'Test1' || description == 'Test2'){ 
    return eltern; 
  } 
  // 关键:把递归的结果return出去
  return await getEltern(eltern.CategoryId); 
}

写法2:赋值后return变量

async function getEltern(id){ 
  var eltern = await getTreeById(id); 
  var description = eltern.Descriptions.CategoryDescription; 
  description = (description.length > 1) ? description[0].Description: description.Description; 
  if (description == 'Test1' || description == 'Test2'){ 
    return eltern; 
  } 
  eltern = await getEltern(eltern.CategoryId);
  // 新增:返回最终拿到的eltern
  return eltern; 
}

额外建议:添加边界条件避免异常

为了防止递归过程中出现getTreeById返回null、或者节点没有CategoryId导致无限递归的情况,最好加上边界判断:

async function getEltern(id){ 
  // 如果id不存在,直接返回null避免无效调用
  if (!id) return null;
  
  var eltern = await getTreeById(id); 
  // 如果获取不到节点,也返回null
  if (!eltern) return null;
  
  var description = eltern.Descriptions.CategoryDescription; 
  description = (description.length > 1) ? description[0].Description: description.Description; 
  
  if (description == 'Test1' || description == 'Test2'){ 
    return eltern; 
  } 
  
  return await getEltern(eltern.CategoryId); 
}

这样修改后,你再调用var eltern = await getEltern(parentNode.CategoryId)就能拿到预期的对象啦!

内容的提问来源于stack exchange,提问作者wapt49

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 08:18:11