我目前的代码是:
const Discord = require('discord.js');
const client = new Discord.Client();
client.on('ready', () => {
console.log('I am ready!');
});
function getData(location1) {
var getResult = "";
request.get('https://maps.googleapis.com/... ' + location1, (err, response) => {
...
return getResult;
}
client.on('message', message => {
if (message.content === 'ping') {
message.channel.send('pong');
}
else if (message.content === 'query Melbourne') {
message.channel.send( getData('Melbourne') ) ;
}
} );
第一个message.channel.send('pong')
工作正常。但第二个message.channel.send不断返回结果:
(node:16047) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 1): DiscordAPIError: Cannot send an empty message
(node:16047) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
只是节点的新手所以任何指导都会受到赞赏。
----更新下面的代码仍然以同样的方式出现错误:
var PTest = function () {
return new Promise(function (resolve, reject) {
message.channel.send( getData('Melbourne') ) ;
});
}
var myfunc = PTest();
myfunc.then(function () {
console.log("Promise Resolved");
}).catch(function () {
console.log("Promise Rejected");
});
答案 0 :(得分:3)
您只需发送一条空消息,就像警告消息写入(node:16047) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 1): DiscordAPIError: Cannot send an empty message
getData('Melbourne')
中的函数message.channel.send( getData('Melbourne') ) ;
返回空消息,拒绝承诺。因为你没有处理Promise拒绝,所以node.js会在控制台上写下警告来通知你这种情况,以防止一些潜在的异常情况发生,通过忽略句柄拒绝拒绝。
要处理承诺拒绝,请为此.catch
函数
send
方法
在更新后的代码中,您可以创建自己的承诺
return new Promise(function (resolve, reject) {
message.channel.send( getData('Melbourne') ) ;
});
message.channel.send
方法返回的Promise仍未处理。你应该写message.channel.send().catch(err => console.log(err));