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

JavaScript代码执行超时(1500ms)问题排查求助

JavaScript代码超时问题排查

执行以下代码时控制台输出Timeout exceeded, make sure your code is executed no more than 1500ms.,代码如下:

console.log('hlo')
let obj = {
  bird: "yguhdjn",
  color: 'blue',
  eat:'insect'
}
function GetObjectKeys(obj, keys)
{
for (let key in obj)
{ if (typeof obj[key] == "object")
{ 
  GetObjectKeys(obj[key], keys);
}
 else {
        keys.push(key);
       }
return keys;

  console.log(obj[key])
}
}

问题分析

  1. return语句位置错误:return keys;写在for...in循环内部,导致循环仅处理第一个键(bird)就直接返回函数,后续的键(color、eat)完全不会被处理,同时return后的console.log(obj[key])永远不会执行。
  2. 未处理keys参数的初始值:如果调用GetObjectKeys时未传入keys数组,keys会是undefined,执行keys.push(key)时会抛出Cannot read property 'push' of undefined错误,可能导致代码异常阻塞。
  3. 潜在的无限递归风险:如果对象存在循环引用(比如obj.self = obj),当前递归逻辑会无限调用GetObjectKeys,直接触发超时或栈溢出。你提供的示例对象虽无循环引用,但如果实际运行的对象包含此类结构,会直接导致超时。
  4. 转义引号语法错误:原代码中的"是HTML转义字符,直接运行会触发JavaScript语法错误,导致代码无法正常解析执行,部分运行环境可能将这种异常判定为超时。

修正后的代码

console.log('hlo')
let obj = {
  bird: "yguhdjn",
  color: 'blue',
  eat:'insect'
}
function GetObjectKeys(obj, keys = []) { // 设置默认参数,避免keys为undefined
  for (let key in obj) {
    if (typeof obj[key] === "object" && obj[key] !== null) { // 排除null(typeof null === 'object')
      GetObjectKeys(obj[key], keys);
    } else {
      keys.push(key);
    }
    console.log(obj[key]); // 移到return前,确保能执行
  }
  return keys; // 移到循环外部,确保所有键都处理完再返回
}

// 调用示例
const result = GetObjectKeys(obj);
console.log(result); // 输出 ["bird", "color", "eat"]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 09:15:31