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

如何将functions文件夹内导出的函数改写为async异步函数

改造方法及完整代码

你只需要给导出的函数添加async关键字标记即可,和你在主逻辑或handler里写异步函数的规则完全一致,独立文件夹导出没有额外适配要求,改造后的代码如下:

const Discord = require('discord.js');
require('dotenv').config();
// 若要配合async/await做数据库操作,建议引入mysql2的promise版本
const mysql = require('mysql2/promise');
let connection;

// 导出多个函数的写法,不要和下方单个导出的写法混用,二选一即可
module.exports = {
    // 函数前加async关键字,标记为异步函数
    autoRoleCheck: async function (message, bot) { 
        // message.member.id是同步属性,不需要加await
        let userId = message.member.id;
        let owner = message.guild.ownerID        
        // fetch返回Promise,需加await获取实际返回的guild实例
        let myGuild = await bot.guilds.fetch(process.env.BOT_GUILD);
        console.log(myGuild);

        // 后续数据库操作直接用await调用即可,示例:
        // const [userRoleRows] = await connection.execute('SELECT role_id FROM user_roles WHERE uid = ?', [userId])
    }
}

/* 单个函数导出的写法
async function autoRoleCheck(message, bot) {
    let userId = message.member.id;
    let owner = message.guild.ownerID        
    let myGuild = await bot.guilds.fetch(process.env.BOT_GUILD);
    console.log(myGuild);
}
module.exports = autoRoleCheck;
*/

注意事项

  • 原有代码中的bot实例在独立模块中无法直接获取,需要在调用函数时作为参数传入
  • 调用异步导出函数时,必须搭配await使用,同时建议加try/catch捕获异步异常,每小时定时执行的示例代码如下:
const { autoRoleCheck } = require('./functions/你的文件名.js');

// 每3600*1000毫秒=1小时执行一次
setInterval(async () => {
  try {
    // 传入需要的参数,若你是全局校验所有用户不需要message参数,可以自行修改函数逻辑去掉该参数,直接遍历bot内的guild成员即可
    await autoRoleCheck(message, bot);
  } catch (err) {
    console.error('角色校验任务执行出错:', err);
  }
}, 3600 * 1000);
  • 不要重复赋值module.exports,后续的赋值会直接覆盖之前的导出内容,按需选择多函数导出或单函数导出即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 08:36:04