我正在创建一个不和谐机器人,并尝试更好地构建。
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返回await,并且处理程序如下所示:
require('./commands' + inputs[0] + '.js')(inputs).then(m => message.channel.send(m));
答案 0 :(得分:0)
最简单的方法是使用ES7 Async Await ......
module.exports = async commands => {
return await axios.get(some url).then(response => {
return response.data.whatever;
}).catch(error => {
return "API error.";
});
}
您需要在函数声明之前添加async
关键字,并在要等待的调用之前添加await
关键字。这样,只要使用await
关键字为函数调用添加前缀,async函数就会暂停并等待被调用函数返回。这允许您以同步方式编写异步代码。
或者,您可以使用Promise,但这需要对您的消息通道代码进行更多更改。
答案 1 :(得分:0)
由于<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="//PRODUCT[@TYPE='1']/SUB[@CAT='1.1']/ITEM">
<xsl:if test="//PRODUCT[@TYPE='1']/SUB[@CAT='1.1']/ITEM /RULE (@BEGIN <= current()/@BEGIN) and (@END >= current()/@END)]">
<xsl:element name="MULTIPLE">
</xsl:element>
</xsl:if>
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
不在函数
试试这个:
return returnM;
// export a function that when called returns
// a promise that resolves to `whatever`
module.exports = commands => axios.get(url).then(
response => response.data.whatever,
error => 'API error.'
)
请注意某些人是否试图调用// when required, called and then resolved,
// calls the send command with the resolved value `whatever`
require('./commands/' + inputs[0] + '.js')(inputs).then(message.channel.send)
命令或其他东西