Discord.js 异步和等待问题

时间:2021-06-05 20:16:49

标签: javascript discord.js

我正在更改我的代码以包含 async 和 await

module.exports = {
    name: 'claim',
    description: 'claiming an order',
    args: 'true',
    usage: '<order id>',
    aliases: ['ao'],
    examples: 'claim a12',
    employeeOnly: 'true',
    async execute(message, prefix) {
        const args = message.content.slice(prefix.length).trim().split(/ +/g);

        let ticketID = args[1];
                
        await fsn.readJSON("./orders.json").then((orderDB) => {
                    
            const order = orderDB[ticketID];
            
            let orderclaimed = await db.get(`User${message.author.id}.orderclaimed`)
            
            if(orderclaimed !== null) return message.reply(`You already have claimed an order before! deliver it first! ID: ${orderclaimed}`)
          
            if(order === undefined) {
              message.reply(`Couldn't find order \`${args[1]}\` Try again.`);

            return;
            }
 // rest of code

但在线

let orderclaimed = await db.get(`User${message.author.id}.orderclaimed`)

我收到此错误

await db.set(`User${message.author.id}.orderclaimed`, ticketID)
                ^^^^^

SyntaxError: await is only valid in async function

但是我在 execute 函数中包含了 async,我需要在哪里包含它?

1 个答案:

答案 0 :(得分:0)

您在使用 .then(...) 回调时输入了一个新范围,您现在必须使该函数 async

module.exports = {
    name: 'claim',
    description: 'claiming an order',
    args: 'true',
    usage: '<order id>',
    aliases: ['ao'],
    examples: 'claim a12',
    employeeOnly: 'true',
    async execute(message, prefix) {
        const args = message.content.slice(prefix.length).trim().split(/ +/g);

        let ticketID = args[1];
                
        // Make this async aswell
        await fsn.readJSON("./orders.json").then(async orderDB => {
                    
            const order = orderDB[ticketID];
            
            let orderclaimed = await db.get(`User${message.author.id}.orderclaimed`)
            
            if(orderclaimed !== null) return message.reply(`You already have claimed an order before! deliver it first! ID: ${orderclaimed}`)
          
            if(order === undefined) {
              message.reply(`Couldn't find order \`${args[1]}\` Try again.`);

            return;
            }

您也可以将 await 的结果readJSON(...) 全部归入同一范围内。

const orderDB = await fsn.readJSON("./orders.json")
// Rest of your code