在以下位置出现未处理的拒绝:TypeError:无法读取未定义的属性“ execute”

时间:2019-11-30 02:23:25

标签: javascript node.js discord

控制台显示错误出现在use.cpp中。我正在尝试从另一个文件中导出货币命令代码,并将其导入此处,只是看起来更好一点。

错误:#include "my.h" int foo = 7; int main(int argc, char *argv[]) { print_foo(); print(99); return 0; }

index.js
Unhandled Rejection at: TypeError: Cannot read property 'execute' of undefined

如果任何人都可以看到问题(很抱歉,很明显!)并帮助我,将不胜感激!谢谢。

1 个答案:

答案 0 :(得分:0)

要使代码正常工作,client.commands必须是包含在coin.js中创建的导入数组的对象。

.get必须是client.commands对象上的函数,该函数必须返回coin.js数组中的所需对象。

要等待execute的输出,它必须在异步函数中执行(除非您使用的是最新的JS)。您还应该在try/catch块中执行它,这将消除“未处理的拒绝”错误。

// index.js

const coins = require('./coin.js')

const client = {
  commands: {
    cmds: [...coins],

    get(cmd) { 
      return commands.cmds.filter(item => item.name === cmd)
    }
  }
}

const doThing = async () => {
  try {
    switch (cmd) {
      case 'coinflip':
        await client.commands.get('coinflip').execute(msg, args)
        break
    }
  } catch (err) {
    console.error(err)
  }
}

;(async () => {
  const cmd = 'coinflip'
  await doThing(cmd)
})()

// coins.js

module.exports = [
  {
    name: "coinflip",
    async execute(message, args) {
      //coinflip code here
    }
  }
]

这似乎有点过分,可以简化为:

// index.js

const coinflip = require('./coin.js')

const client = {
  commands: {
    coinflip
  }
}

const doThing = async cmd => {
  try {
    await client.commands[cmd].execute(msg, args)
  } catch (err) {
    console.error(err)
  }
}

;(async () => {
  const cmd = 'coinflip'
  await doThing(cmd)
})()

// coins.js

module.exports = {
  async execute(message, args) {
    //coinflip code here
  }
}