【发布时间】:2018-07-21 01:40:19
【问题描述】:
我正在创建一个不和谐的机器人,并尝试将结构做得更好。
message.channel.send(require('./commands/' + inputs[0] + '.js')(inputs));
这将需要一个文件并将返回的消息发送到频道。这是此类文件的示例:
module.exports = commands => {
let returnM = '';
axios.get(some url).then(response => {
returnM = response.data.whatever;
}).catch(error => {
returnM = "API error.";
});
}
return returnM;
我收到“无法显示空消息”,因为该函数尚未返回任何内容,并且消息发送者已经在尝试执行。怎么会这样,它会等待,直到响应被拉出并处理?
编辑: 知道了!谢谢您的帮助! 使导出的函数 async 和整个 axios pull return await 和 handler 看起来像这样:
require('./commands' + inputs[0] + '.js')(inputs).then(m => message.channel.send(m));
【问题讨论】:
-
channel.send()是否接受承诺作为参数? -
@Sirko 我不这么认为。
-
简短的回答是:不能同步返回结果的函数根本不返回结果,至少不直接返回。它们返回一个 Promise,Promise 在准备好时返回结果。您使用
then()将回调附加到 Promise 并在其准备就绪时对其结果进行处理。
标签: javascript node.js promise axios discord.js