运行 对象中存储的函数
Run a Function Stored in an Object
我用ES6文档创建对象,成功了!但是,当我尝试通过 shardHandler('help')
之类的方式调用函数时,控制台显示 Promise { <pending> }
但从未调用 1、2、3、4 等。
下面是我的代码。如何从对象内部调用函数?
const shardHandler = async (arg) => ({
"ids": (client, message) => {
console.log('1')
},
"respawn": (client, message) => {
console.log('2')
},
"kill": (client, message) => {
console.log('3')
},
"restart": (client, message) => {
console.log('4')
},
"help": (message) => {
console.log('5')
}
})[arg] || "help";
const run = async () => shardHandler('kill');
run()
你这里有几个问题。
首先,调用 shardHandler
returns 一个 Promise
因为它是一个 async
函数。因此,如果您想访问您在对象中定义的函数之一,则必须 await
承诺。
const shardHandler = async (arg) => ({
"kill": (client, message) => {
console.log('3')
},
})[arg]
const run = async () => {
const result = await shardHandler('kill')
result()
}
run()
然后我还看到,如果没有向 shardHandler
提供任何参数,您试图默认返回“帮助”,但您编写的方式不会那样工作:您只是解决了实际字符串 "help"
而不是函数。以下是实现方法:
const shardHandler = async (arg) => ({
// ...
})[arg || "help"];
const shardHandler = async (arg = "help") => ({
// ...
})[arg];
然后,除非有某些特定原因您没有在此处显示(这可能是完全合适的,因为在发布之前必须简化他们的问题!),shardHandler
不需要是函数:把它变成一个对象。
const shardHandler = {
"ids": (client, message) => {
console.log('1')
},
"respawn": (client, message) => {
console.log('2')
},
"kill": (client, message) => {
console.log('3')
},
"restart": (client, message) => {
console.log('4')
},
"help": (message) => {
console.log('5')
}
}
const run = () => shardHandler['kill']()
最后,async
关键字的位置似乎很奇怪。如果没有更完整的代码版本,很难确定,但要小心。调用一个 async
函数总是 returns 一个 Promise
然后你必须从 another async
中用 await
处理上下文,或使用 .then()
以获得实际的“所需”输出。
我用ES6文档创建对象,成功了!但是,当我尝试通过 shardHandler('help')
之类的方式调用函数时,控制台显示 Promise { <pending> }
但从未调用 1、2、3、4 等。
下面是我的代码。如何从对象内部调用函数?
const shardHandler = async (arg) => ({
"ids": (client, message) => {
console.log('1')
},
"respawn": (client, message) => {
console.log('2')
},
"kill": (client, message) => {
console.log('3')
},
"restart": (client, message) => {
console.log('4')
},
"help": (message) => {
console.log('5')
}
})[arg] || "help";
const run = async () => shardHandler('kill');
run()
你这里有几个问题。
首先,调用 shardHandler
returns 一个 Promise
因为它是一个 async
函数。因此,如果您想访问您在对象中定义的函数之一,则必须 await
承诺。
const shardHandler = async (arg) => ({
"kill": (client, message) => {
console.log('3')
},
})[arg]
const run = async () => {
const result = await shardHandler('kill')
result()
}
run()
然后我还看到,如果没有向 shardHandler
提供任何参数,您试图默认返回“帮助”,但您编写的方式不会那样工作:您只是解决了实际字符串 "help"
而不是函数。以下是实现方法:
const shardHandler = async (arg) => ({
// ...
})[arg || "help"];
const shardHandler = async (arg = "help") => ({
// ...
})[arg];
然后,除非有某些特定原因您没有在此处显示(这可能是完全合适的,因为在发布之前必须简化他们的问题!),shardHandler
不需要是函数:把它变成一个对象。
const shardHandler = {
"ids": (client, message) => {
console.log('1')
},
"respawn": (client, message) => {
console.log('2')
},
"kill": (client, message) => {
console.log('3')
},
"restart": (client, message) => {
console.log('4')
},
"help": (message) => {
console.log('5')
}
}
const run = () => shardHandler['kill']()
最后,async
关键字的位置似乎很奇怪。如果没有更完整的代码版本,很难确定,但要小心。调用一个 async
函数总是 returns 一个 Promise
然后你必须从 another async
中用 await
处理上下文,或使用 .then()
以获得实际的“所需”输出。