我正在try 做一个函数,将验证一个Discord邀请,并判断邀请是否是临时的,只是从一个Discord邀请URL.如果邀请是临时的,我希望它将过期日期返回为new Date.如果它没有过期,我希望函数返回false.

async function getInviteExpiration(inviteUrl) {
  // Extract the invite code from the URL
  const regex = /discord\.gg\/([a-zA-Z0-9]+)/;
  const match = inviteUrl.match(regex);
  if (!match) {
    throw new Error('Invalid invite URL');
  }

  const inviteCode = match[1];

  const response = UrlFetchApp.fetch(`https://discord.com/api/invites/${inviteCode}?with_counts=true`);
  if (response.getResponseCode() !== 200) {
    throw new Error('Failed to fetch discord invite information');
  }

  const inviteData = JSON.parse(response.getContentText());
  console.log(inviteData.expires_at);  // Temporary, just for testing
  console.log(new Date(inviteData.expires_at));  // Temporary, just for testing
  if (inviteData.expires_at === null) {
    return false; // Invite never expires
  } else {
    return new Date(inviteData.expires_at); // Return expiration date
  }
}

我做了一个测试函数来测试getInviteExpiration.

function test() {
  const permanentUrl = "https://discord.gg/minecraft";
  console.log(getInviteExpiration(permanentUrl)); // Expecting false
  
  const tempUrl = "https://discord.gg/DdMJXskh";
  console.log(getInviteExpiration(tempUrl)); // Expecting Date
}

这是输出的控制台

null
Wed Dec 31 1969 18:00:00 GMT-0600 (Central Standard Time)
{}
2024-04-18T02:27:18+00:00
Wed Apr 17 2024 21:27:18 GMT-0500 (Central Daylight Time)
{}

为什么在getInviteExpiration函数中,我得到的对象是空的,而它可以解析console.log(new Date(inviteData.expires_at))

推荐答案

如果我对您当前问题Why is it that I'm getting empty objects when in the getInviteExpiration function, it was able to parse console.log(new Date(inviteData.expires_at))?的理解是正确的,我猜您当前问题的原因是由于async.那么,下面的修改怎么样?

修改脚本1:

在此修改中,删除了async个.在此修改中,仅修改了getInviteExpiration.

From:

async function getInviteExpiration(inviteUrl) {

To:

function getInviteExpiration(inviteUrl) {

修改脚本2:

如果你需要使用async,那么下面的修改怎么样?在此修改中,仅修改了test.

From:

function test() {
  const permanentUrl = "https://discord.gg/minecraft";
  console.log(getInviteExpiration(permanentUrl)); // Expecting false
  
  const tempUrl = "https://discord.gg/DdMJXskh";
  console.log(getInviteExpiration(tempUrl)); // Expecting Date
}

To:

async function test() {
  const permanentUrl = "https://discord.gg/minecraft";
  console.log(await getInviteExpiration(permanentUrl)); // Expecting false

  const tempUrl = "https://discord.gg/DdMJXskh";
  console.log(await getInviteExpiration(tempUrl)); // Expecting Date
}

Javascript相关问答推荐

为什么在获取回调内设置状态(不会)会导致无限循环?

在分区内迭代分区

React存档iframe点击行为

是否有方法在OpenWeatherMap API中获取过go 的降水数据?

如何使用侧边滚动按钮具体滚动每4个格?

在网页上添加谷歌亵渎词

空的结果抓取网站与Fetch和Cheerio

我在我的Java代码中遇到了问题,代码的一部分看不到先前定义的对象

在open shadow—root中匹配时,使用jQuery删除一个封闭的div类

一个实体一刀VS每个实体多刀S

WebSocketException:远程方在未完成关闭握手的情况下关闭了WebSocket连接.&#三十九岁;

如何为仅有数据可用的点显示X轴标签?

在JS/TS中将复杂图形转换为数组或其他数据 struct

如何压缩图像并将其编码为文本?

固定动态、self 调整的优先级队列

Firebase函数中的FireStore WHERE子句无法执行

如何阻止外部脚本进入顶层导航

验证Java脚本函数中的两个变量

如果我将高度设置为其内容的100%,则在Java脚本中拖动以调整面板大小时会冻结

Reaction路由v6.4+数据API:重试加载程序而不显示错误