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

Discord机器人开发报错:UnhandledPromiseRejectionWarning 无法读取null的split属性

报错原因&修复方案

你遇到的UnhandledPromiseRejectionWarning: TypeError: Cannot read property 'split' of null报错核心由以下问题导致:

  • 低级语法错误:你声明存储收集结果的变量时写的是let results = {},这是对象类型,没有push方法,你往里面塞用户回复的操作完全失效,results[2]自然为undefined,和null的判断不生效,后续调用split方法就直接报错。
  • 校验逻辑缺失:你只判断了results[2] !== null,没有覆盖undefined、空字符串、输入内容不含:的场景,就算数组声明正确,用户输入不符合要求时也会触发同类报错。

另外还有几个需要同步修复的隐藏问题:

  • 代码中用到的res变量没有提前声明,属于隐式全局变量,会引发不可预估的运行异常。
  • 错误回调里把message拼写为mesage,报错触发时会抛出新的未捕获异常。
  • 保存数据时给new data()传第二个upsert参数是无效的,upsert是更新操作的配置项,新建文档不需要传该参数。

核心修复代码片段

只需要替换collector.on('end')部分的代码即可:

collector.on('end', async (collected) => {
    // 把对象声明改为数组声明
    let results = [];
    collected.forEach((value) => {
        results.push(value.content);
        console.log(value.content)
    });

    let res2;
    // 补充完整的前置校验
    if (results.length >=3 && typeof results[2] === 'string' && results[2].includes(':')) {
        res2 = results[2].split(':');
    } else {
        return message.reply('请输入符合格式的提醒时间,格式为HH:MM');
    }
    // 补充拆分结果校验
    if (!res2 || res2.length < 2) {
        return message.reply('时间格式错误,请重新运行注册命令');
    }

    // 此处保留你原来的后续逻辑不变
    console.log('results[0].length : ' + results[0].length);
    console.log('results[1].length : ' + results[1].length);
    console.log('res2[0].length : ' + res2[0].length);
    console.log('res2[1].length : ' + res2[1].length);

    // 原有校验、入库逻辑不变...
})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 09:27:03