Google Apps Script中Discord邀请API响应的日期解析问题
问题原因与解决方案
核心原因
getInviteExpiration是async函数,这类函数的返回值会被自动包装成Promise对象,而非直接返回你在函数里定义的false或Date实例。测试函数里直接console.log(getInviteExpiration(...)),打印的是未完成状态的Promise对象,在Google Apps Script控制台中会显示为{}。
函数内部的console.log能正常输出日期,是因为函数内部的异步逻辑已经执行,但返回值被Promise包装后,测试函数没有等待Promise完成就直接打印了这个包装对象。
修复方案
有两种方式解决这个问题:
方式1:将测试函数改为async函数,用await调用目标函数
async function test() { const permanentUrl = "https://discord.gg/minecraft"; const permanentResult = await getInviteExpiration(permanentUrl); console.log(permanentResult); // 输出false const tempUrl = "https://discord.gg/DdMJXskh"; const tempResult = await getInviteExpiration(tempUrl); console.log(tempResult); // 输出Date实例 }
方式2:用Promise的.then()方法处理返回结果
function test() { const permanentUrl = "https://discord.gg/minecraft"; getInviteExpiration(permanentUrl) .then(result => console.log(result)) // 输出false .catch(err => console.error(err)); const tempUrl = "https://discord.gg/DdMJXskh"; getInviteExpiration(tempUrl) .then(result => console.log(result)) // 输出Date实例 .catch(err => console.error(err)); }
额外说明
Google Apps Script支持async/await语法,但需确保脚本运行环境基于V8引擎(当前默认已启用,旧项目可检查项目设置确认)。另外调用Discord API时需注意请求频率限制,避免触发封禁机制。
内容的提问来源于stack exchange,提问作者Blake
相关产品推荐
相关产品推荐

