Javascript TypeError:无法读取属性';楠';未定义的

Javascript TypeError:无法读取属性';楠';未定义的,javascript,discord.js,undefined,nan,fetch-api,Javascript,Discord.js,Undefined,Nan,Fetch Api,这个代码有问题。它给了我以下错误: TypeError:无法读取未定义的属性“NaN” 属性NaN 代码中的NaN是变量索引。如果result.length为undefined,则Math.floor(Math.random()*result.length)将为NaN 当您试图从数组中获取项目时,您使用的是result.results[index],这意味着result是一个具有results属性的对象,该属性是一个数组。因此,result本身不是数组,访问result.length没有意义。您

这个代码有问题。它给了我以下错误:

TypeError:无法读取未定义的属性“NaN”

属性
NaN
代码中的
NaN
是变量
索引
。如果
result.length
undefined
,则
Math.floor(Math.random()*result.length)
将为
NaN

当您试图从数组中获取项目时,您使用的是
result.results[index]
,这意味着
result
是一个具有
results
属性的对象,该属性是一个数组。因此,
result
本身不是数组,访问
result.length
没有意义。您需要result.results.length`

属于未定义的
错误“无法读取未定义的属性'NaN'”来自
result.results[index]
。因此,如果
index
NaN
属性,那么
result.results
未定义的值。Tenor API应该返回一个带有
results
属性的对象,因此这可能是由于请求格式不正确造成的。例如,如果您有一个无效的
,您的响应将是一个具有属性
错误
且没有
结果的对象
。您还可能有一个无效的
q
,因此需要使用
encodeURIComponent
对其进行转义

我没有足够的信息来了解您的请求失败的原因,但我们可以检查是否有
数组和
控制台。否则,记录
结果,以便您可以检查它(或
抛出
错误
)。当您进一步改进代码时,您将希望引入
try
/
catch

const testFunc=async(msgContent,apiKey=”“)=>{
const tokens=msgContent.split(“”);
如果(令牌[0]==“!gif”){
const关键字=encodeURIComponent(
tokens.slice(1,tokens.length).join(“”)
);
//似乎在没有钥匙的情况下工作
常量url=`https://api.tenor.com/v1/search?q=${keywords}&key=${apiKey}&limit=10`;
const response=等待获取(url);
const result=wait response.json();
如果(结果中的“结果”){
const images=result.results;
const index=Math.floor(Math.random()*images.length);
返回图像[index].url;
}否则{
日志(“无效响应”,结果);
}
}
};

testFunc(“!gif cat”,”),然后(console.log)我是新来的,我正在寻求帮助。我得到了这个错误:TypeError:无法读取未定义的属性'NaN',我不知道如何修复这个问题尝试记录您的结果变量,看看您得到了什么。要么是某种错误,要么不是您所期望的数据结构。您的代码暗示result是一个数组(因为您访问result.length),并且它是一个具有属性results的对象,results是一个数组(因为您访问result.results[index])。您的错误消息暗示两者都不是真的!当与result.length相乘时,您会得到一个NaN索引,“of undefined”表示result.results未定义。我正在查看API,您确实想要
result.results.length
而不是
result.length
。我不确定您为什么会得到
结果。结果
未定义
。可能是一个格式错误的查询。您可能想在
关键字上使用
encodeURIComponent
。但是你的代码在那次改变后对我有效:哦!!!这样的错误消息表明您的代码有几个错误!
dotenv.config();
  
client.on("ready", () => {
  console.log(`Logged in as ${client.user.tag}!`);
});

client.on("message", async (msg) => {
 
  const tokens = msg.content.split(" ");

  
  if (tokens[0] === "!gif") {
   
    const keywords = tokens.slice(1, tokens.length).join(" ");
    
    const url = `https://api.tenor.com/v1/search?q=${keywords}&key=${process.env.EK3M4TY0S70Y}&limit=10`;
    
    const response = await fetch(url);
    
    const result = await response.json();
    
    const index = Math.floor(Math.random() * result.length);
    
    msg.channel.send(result.results[index].url);
  }
});