我正在更改我的代码以包含 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,我需要在哪里包含它?
答案 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