如何修复 repl.it 中未处理的promiserejection。我所说的错误“无法读取 q 的属性”
Posted
技术标签:
【中文标题】如何修复 repl.it 中未处理的promiserejection。我所说的错误“无法读取 q 的属性”【英文标题】:How to fix an unhandledpromiserejection in repl.it. The error I had said "cannot read the property of q" 【发布时间】:2021-09-02 12:46:48 【问题描述】:我正在关注 YT 的教程,这里是链接 https://www.youtube.com/watch?v=7rU_KyudGBY&t=726s 来创建一个不和谐的机器人。但是我有一个错误,我不知道如何解决。它说“无法读取 q 的属性”。我的代码中唯一的 q 在 getQuote 函数中。我想要做的是,当我输入 $inspire 时,机器人会给出一个鼓舞人心的报价。但是当我这样做时,它会给出错误“无法读取 q 的属性”以及“
const Discord = require("discord.js")
const fetch = require("node-fetch")
const client = new Discord.Client()
const mySecret = process.env['TOKEN']
function getQuote()
return fetch("https://zenquotes.io/api/random")
.then(res =>
return res.json
)
.then(data =>
return data[0]["q"] + " -" + data[0]["a"]
)
client.on('ready', () =>
console.log(`Logged in as $client.user.tag!`)
)
client.on("message", msg =>
if(msg.content === "ping")
msg.reply("pong")
)
client.on("message", msg =>
if(msg.author.bot)return
if(msg.content === "$inspire")
getQuote().then(quote => msg.channel.send(quote))
)
client.login(process.env.TOKEN)
它有点过时了(它是在 2021 年 3 月 8 日制作的)。我在 repl 中对此进行了编码。关于它如何工作的任何想法?提前致谢
【问题讨论】:
【参考方案1】:unhandledPromiseRejection
错误发生在你不“处理” Promise 被拒绝的情况下。这意味着您应该查看您的代码以找到 Promise 的实现,并确保您处理失败的情况 - 对于 Promises,这通常意味着在链中实现 catch
或 finally
情况。
查看您的代码,很可能因为您在fetch
调用中没有catch
ing 潜在错误。
function getQuote()
return fetch("https://zenquotes.io/api/random")
.then(res =>
return res.json() // <- careful here too.. `json()` is a method.
)
.then(data =>
return data[0]["q"] + " -" + data[0]["a"]
)
// +
.catch((error) =>
// Catch errors :)
);
【讨论】:
我对 .catch() 进行了更多研究,我不得不将函数名放在 .catch 之前。但是当我输入 getQuote 时,它说 getQuote.catch 不是一个函数。其他一切都好的话。对于捕获错误部分,我只是把``console.error(error)`` 任何想法如何解决这个问题? 我很笨,我忘了把 .catch() 放在 get quote 函数中 你不傻!斗争是学习的一部分。掌握的很大一部分来自于理解不做什么。以上是关于如何修复 repl.it 中未处理的promiserejection。我所说的错误“无法读取 q 的属性”的主要内容,如果未能解决你的问题,请参考以下文章