【发布时间】:2018-05-10 03:04:42
【问题描述】:
我目前正在尝试使用 node.js 编写一个不和谐的机器人。目前,我有一个函数返回一个变量设置的值。之后,控制台打印出变量。但是,变量在从函数中分配值之前会在控制台上打印出来。
代码:
if(commands[0] === "getlevel"){
let region = commands[1] + "1";
let username = commands[2];
var summonerLevel;
console.log(region, username);
API.setRegion(region);
summonerLevel = await API.getSummonerLevel(username);
console.log("HI");
console.log(summonerLevel);
message.channel.send(summonerLevel);
}
});
所以发生的情况是控制台在 API.getSummonerLevel(username) 函数执行之前打印了有关 summonerLevel 的信息。如何让 getSummonerLevel() 函数在 console.log() 之前运行?
函数代码:
RiotAPI.prototype.getSummonerLevel = function(_username){
var summonerJSON; var summoner;
var url = baseURL1 + region + baseURL2 + "/lol/summoner/v3/summoners/by-name/" + _username + "?api_key=" + API_KEY;
console.log("Before");
var options = {
uri: url,
simple: false
};
request.get(options)
.then(function(body){
console.log("After");
summonerJSON = body;
summoner = JSON.parse(summonerJSON);
console.log(summoner);
console.log(summoner.summonerLevel);
return summoner.summonerLevel;
})
.catch(function(err){
//should.throw.error.to.console();
})
.catch(function(err){
console.log(err);
});
}
另外,我遇到的另一个问题是我收到未处理的承诺拒绝警告,并且 request.get(...) 之后的 .catch() 似乎无法解决它。我将如何解决这个问题?
控制台日志(不确定这是否有用但是...):
之前 你好 不明确的 (节点:13624)UnhandledPromiseRejectionWarning:未处理的承诺拒绝(拒绝 id:2):DiscordAPIError:无法发送空消息 (节点:13624)[DEP0018] DeprecationWarning:不推荐使用未处理的承诺拒绝。将来,未处理的 Promise 拒绝将使用非零退出代码终止 Node.js 进程。 后 { 编号:45932456, 帐号:206692908, 名称:'fire263', profileIconId: 911, 修订日期:1511729881000, 召唤师等级:36 } 36
【问题讨论】:
-
您希望使用
promise。 -
阅读错误日志的内容。
-
getSummonerLevel不返回任何内容 -
@JaromandaX 不是吗?所以返回必须在 request/then/catch 函数之外,对吧?
-
并不是说您需要在这些回调函数中移动任何现有的返回值,我是说您需要在
getSummonerLevel中拥有一个返回值......我会说,return request.get(options)....会有所帮助
标签: javascript node.js function promise unhandled-exception