0

0

JavaScript中Promise构造函数中throw错误的捕获

舞姬之光

舞姬之光

发布时间:2026-03-16 20:42:01

|

191人浏览过

|

来源于php中文网

原创

Promise构造函数中同步throw不会被外层try...catch捕获,而是自动转为rejected状态,需用.catch()或await+try...catch处理;异步回调中throw则必须显式reject,否则抛出未捕获错误。

javascript中promise构造函数中throw错误的捕获

在 Promise 构造函数中直接 throw 错误,**不会被外部的 try...catch 捕获**,而是会自动触发 Promise 的拒绝(rejected)状态,必须通过 .catch()await 的异常处理机制来捕获。

为什么 try...catch 无法捕获 Promise 内部的 throw?

Promise 构造函数的执行器(executor)函数是**同步立即执行**的,但其内部抛出的错误会被 Promise 自动拦截并转化为 rejected 状态,而不是冒泡到外层同步执行流。因此:

  • 写在 new Promise(() => { throw new Error('xxx') }) 中的 throw,不会跳出当前函数作用域,也不会被外层 try...catch 捕获;
  • 它等价于调用了 reject(new Error('xxx'))
  • 错误对象会作为 rejection reason 传递给后续的 .catch()await 的 catch 分支。

正确捕获方式:使用 .catch() 或 await + try...catch

推荐两种主流写法:

叮当好记-AI音视频转图文
叮当好记-AI音视频转图文

AI音视频转录与总结,内容学习效率 x10!

下载
  • 链式调用 .catch()
    new Promise((resolve, reject) => { throw new Error('fail'); })<br>  .catch(err => console.error(err.message)); // 'fail'
  • async/await 配合 try...catch(更直观):
    async function test() {<br>  try {<br>    await new Promise((_, reject) => { throw new Error('fail'); });<br>  } catch (err) {<br>    console.error(err.message); // 'fail'<br>  }<br>}

注意:构造函数内异步操作中的 throw 仍需 reject 处理

如果 throw 发生在 setTimeout、fetch 回调等**异步回调中**,Promise 构造函数已执行完毕,此时 throw 是真正的未捕获异常(Uncaught Error),不会影响 Promise 状态。必须显式调用 reject()

立即学习Java免费学习笔记(深入)”;

  • ❌ 错误写法(导致全局 uncaught error):
    new Promise((resolve, reject) => {<br>  setTimeout(() => { throw new Error('async fail'); }, 0);<br>});
  • ✅ 正确写法:
    new Promise((resolve, reject) => {<br>  setTimeout(() => reject(new Error('async fail')), 0);<br>});

小结:核心原则

  • Promise executor 中同步 throw → 自动 reject,靠 .catch()await 捕获;
  • executor 中异步代码里 throw → 不影响 Promise,必须手动 reject;
  • 外层同步 try...catch 对 Promise 内部 throw 完全无效;
  • 统一用 reject(...) 显式控制失败逻辑,比依赖 throw 更清晰可靠。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
scripterror怎么解决
scripterror怎么解决

scripterror的解决办法有检查语法、文件路径、检查网络连接、浏览器兼容性、使用try-catch语句、使用开发者工具进行调试、更新浏览器和JavaScript库或寻求专业帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

513

2023.10.18

500error怎么解决
500error怎么解决

500error的解决办法有检查服务器日志、检查代码、检查服务器配置、更新软件版本、重新启动服务、调试代码和寻求帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

384

2023.10.25

console接口是干嘛的
console接口是干嘛的

console接口是一种用于在计算机命令行或浏览器开发工具中输出信息的工具,提供了一种简单的方式来记录和查看应用程序的输出结果和调试信息。本专题为大家提供console接口相关的各种文章、以及下载和课程。

420

2023.08.08

console.log是什么
console.log是什么

console.log 是 javascript 函数,用于在浏览器控制台中输出信息,便于调试和故障排除。想了解更多console.log的相关内容,可以阅读本专题下面的文章。

543

2024.05.29

function是什么
function是什么

function是函数的意思,是一段具有特定功能的可重复使用的代码块,是程序的基本组成单元之一,可以接受输入参数,执行特定的操作,并返回结果。本专题为大家提供function是什么的相关的文章、下载、课程内容,供大家免费下载体验。

500

2023.08.04

js函数function用法
js函数function用法

js函数function用法有:1、声明函数;2、调用函数;3、函数参数;4、函数返回值;5、匿名函数;6、函数作为参数;7、函数作用域;8、递归函数。本专题提供js函数function用法的相关文章内容,大家可以免费阅读。

167

2023.10.07

promise的用法
promise的用法

“promise” 是一种用于处理异步操作的编程概念,它可以用来表示一个异步操作的最终结果。Promise 对象有三种状态:pending(进行中)、fulfilled(已成功)和 rejected(已失败)。Promise的用法主要包括构造函数、实例方法(then、catch、finally)和状态转换。

339

2023.10.12

html文本框类型介绍
html文本框类型介绍

html文本框类型有单行文本框、密码文本框、数字文本框、日期文本框、时间文本框、文件上传文本框、多行文本框等等。详细介绍:1、单行文本框是最常见的文本框类型,用于接受单行文本输入,用户可以在文本框中输入任意文本,例如用户名、密码、电子邮件地址等;2、密码文本框用于接受密码输入,用户在输入密码时,文本框中的内容会被隐藏,以保护用户的隐私;3、数字文本框等等。

429

2023.10.12

chatgpt使用指南
chatgpt使用指南

本专题整合了chatgpt使用教程、新手使用说明等等相关内容,阅读专题下面的文章了解更多详细内容。

0

2026.03.16

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
React 教程
React 教程

共58课时 | 6.1万人学习

TypeScript 教程
TypeScript 教程

共19课时 | 3.5万人学习

Bootstrap 5教程
Bootstrap 5教程

共46课时 | 3.6万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号