javascript - Promise 引发“未处理的承诺拒绝”错误的奇怪行为
问题描述
当我使用 Node 运行此代码时,它会Unhandled promise rejection
在控制台中引发错误(甚至error caught
首先显示文本)。
const promise = new Promise((resolve, reject) => setTimeout(reject, 1000))
promise.then(() => console.log('ok'))
promise.catch((e) => console.log('error caught'))
然而,当我将方法链接catch
到then
方法时,错误消失了:
const promise = new Promise((resolve, reject) => setTimeout(reject, 1000))
promise.then(() => console.log('ok')).catch((e) => console.log('error caught'))
第一个代码不是应该处理拒绝吗?
我还尝试了 Chrome 中的第一个代码,如果我在新标签(或 google.com)中打开检查器,它就可以工作。如果我在任何其他页面(如 stackoverflow.com)中,它会引发异常。对此有何解释?这对我来说真的很奇怪!
解决方案
为了被视为已处理,被拒绝的 Promise 应与then(..., ...)
(2 个参数) 或catch(...)
.
promise.then(() => console.log('ok'))
是一个单独的承诺,没有与 链接 catch(...)
,因此被拒绝的承诺将导致未处理的拒绝。
如果我在任何其他页面(如 stackoverflow.com)中,则会引发异常
这不是例外,它不会阻止脚本正常运行。处理未处理的拒绝的方式取决于Promise
实施。默认情况下,Chrome 实现会导致Uncaught (in promise)
控制台错误。
它没有出现在 Chrome 中的某些网站上意味着网站设置了抑制错误输出的unhandledrejection
事件处理程序。
推荐阅读
- python - 如何在 Django 中使用多个数据库 [使用数据库路由器]
- javascript - Discord.js 不能使用“发送”功能来 DM 一个人,因为它是未定义的?
- python - Python,Pandas,DataFrame,添加新列执行 SQL GROUP_CONCAT 等效
- reactjs - 视频反应 - 如何订阅状态变化
- javascript - 仅当 Div 高于 X 时,文本才会在 Div 中淡入/淡出
- python-3.x - Oauth2 重定向到无效端口 8080
- python - 我用 mysql 在 python tkinter 中更新记录的功能无法正常工作
- python - 在python中使用re.py从子字符串中提取错误
- php - 在 PHP 8 中使用 call_user_func 返回致命错误
- c# - 如何获取年份的最后一位 int 值?