0

0

什么是JavaScript中的Promise与异步【教程】

狼影

狼影

发布时间:2026-01-16 22:27:35

|

590人浏览过

|

来源于php中文网

原创

promise是javascript异步编程的基础设施,本质是同步执行执行器函数的状态容器,不自动触发异步;then/catch需正确配对,promise.all全失败而allsettled可获全部结果。

什么是javascript中的promise与异步【教程】

Promise 是 JavaScript 中处理异步操作的标准机制,不是语法糖,也不是可选工具——它是现代 JS 异步编程的基础设施。你写 fetch()async/await,底层都依赖 Promise 的状态流转和链式能力。


Promise 本质是「状态容器」,不是「自动执行器」

很多人误以为 new Promise() 会“自动开始异步”,其实它只是把一段逻辑(执行器函数)**同步执行一次**,而真正的异步行为(比如 setTimeoutfetchfs.readFile)得你自己写进去。

const p = new Promise((resolve, reject) => {
  console.log('这行立刻执行'); // ✅ 同步打印
  setTimeout(() => {
    resolve('延迟1秒后才触发');
  }, 1000);
});
console.log('这行在new Promise之后立刻执行'); // ✅ 也同步
  • Promise 构造函数里的回调是**同步执行的**,但里面调用的异步 API(如 setTimeout)才是真正的“异步源头”
  • Promise 本身不控制事件循环,它只负责在异步完成时,按规则把 resolvereject 的值塞进微任务队列
  • 漏写异步调用(比如忘了 setTimeoutfetch),Promise 就永远卡在 pending 状态,既不 then 也不 catch

then()catch() 不是“必须成对出现”的开关

常见错误:在 then() 里处理成功,在下一个 then() 里处理失败——这是错的。Promise 链中,catch() 捕获的是**前面所有环节抛出的错误或被 reject 的 Promise**,不是仅捕获上一个 then()

php中级教程之ajax技术
php中级教程之ajax技术

AJAX即“Asynchronous Javascript And XML”(异步JavaScript和XML),是指一种创建交互式网页应用的网页开发技术。它不是新的编程语言,而是一种使用现有标准的新方法,最大的优点是在不重新加载整个页面的情况下,可以与服务器交换数据并更新部分网页内容,不需要任何浏览器插件,但需要用户允许JavaScript在浏览器上执行。《php中级教程之ajax技术》带你快速

下载
Promise.resolve(1)
  .then(x => { throw new Error('boom') })
  .then(x => console.log('不会执行'))
  .catch(err => console.log('这里会捕获 boom')); // ✅ 正确
  • then(onFulfilled, onRejected) 的第二个参数只能捕获**前一个 Promise 成功后、onFulfilled 函数内部抛出的错误**,不能捕获前一个 Promise 本身被 reject 的情况
  • 推荐统一用 .then(...).catch(...) 形式,避免错误静默丢失
  • catch() 后如果没再抛错,后续 then() 仍会执行(因为 catch 返回的是 fulfilled 状态的新 Promise)

并发请求别硬套 Promise.all(),小心全盘失败

当你用 Promise.all([p1, p2, p3]) 并发请求多个接口,只要其中任意一个被 reject,整个 all 就立刻失败——哪怕另外两个早已成功。这不是 bug,是设计使然。

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

const p1 = Promise.resolve('a');
const p2 = Promise.reject(new Error('timeout'));
const p3 = Promise.resolve('c');
<p>Promise.all([p1, p2, p3])
.then(console.log) // ❌ 永远不会执行
.catch(err => console.log(err.message)); // ✅ 输出 'timeout'</p>
  • 需要“不管成败都等全部结束”,改用 Promise.allSettled()(ES2020+,现代浏览器和 Node.js ≥12.9.0 支持)
  • 需要“只要一个成功就停”,用 Promise.race();但注意:第一个 reject 也会让 race 失败
  • 兼容老环境?手动封装:对每个 Promise 做 .then(...).catch(...) 包一层,确保返回 always-fulfilled 结构

Promise 的难点不在语法,而在它把「时间不确定性」显式地变成「状态确定性」。你写的每一步 then,都是在声明:“当上一步确认完成(无论成功失败),请把结果交给我”。一旦习惯这种思维,async/await 就只是语法糖,而不是魔法。真正容易被忽略的,是执行器函数里那句没写上的 reject() —— 它不会报错,只会让整个链悬在那里,等你半夜查监控时才发现某个按钮点了没反应。

热门AI工具

更多
DeepSeek
DeepSeek

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

豆包大模型
豆包大模型

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

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

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

文心一言
文心一言

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

讯飞写作
讯飞写作

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

即梦AI
即梦AI

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

ChatGPT
ChatGPT

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

相关专题

更多
硬盘接口类型介绍
硬盘接口类型介绍

硬盘接口类型有IDE、SATA、SCSI、Fibre Channel、USB、eSATA、mSATA、PCIe等等。详细介绍:1、IDE接口是一种并行接口,主要用于连接硬盘和光驱等设备,它主要有两种类型:ATA和ATAPI,IDE接口已经逐渐被SATA接口;2、SATA接口是一种串行接口,相较于IDE接口,它具有更高的传输速度、更低的功耗和更小的体积;3、SCSI接口等等。

1825

2023.10.19

PHP接口编写教程
PHP接口编写教程

本专题整合了PHP接口编写教程,阅读专题下面的文章了解更多详细内容。

594

2025.10.17

php8.4实现接口限流的教程
php8.4实现接口限流的教程

PHP8.4本身不内置限流功能,需借助Redis(令牌桶)或Swoole(漏桶)实现;文件锁因I/O瓶颈、无跨机共享、秒级精度等缺陷不适用高并发场景。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2350

2025.12.29

java接口相关教程
java接口相关教程

本专题整合了java接口相关内容,阅读专题下面的文章了解更多详细内容。

45

2026.01.19

js正则表达式
js正则表达式

php中文网为大家提供各种js正则表达式语法大全以及各种js正则表达式使用的方法,还有更多js正则表达式的相关文章、相关下载、相关课程,供大家免费下载体验。

530

2023.06.20

js获取当前时间
js获取当前时间

JS全称JavaScript,是一种具有函数优先的轻量级,解释型或即时编译型的编程语言;它是一种属于网络的高级脚本语言,主要用于Web,常用来为网页添加各式各样的动态功能。js怎么获取当前时间呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

534

2023.07.28

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

718

2023.08.03

js是什么意思
js是什么意思

JS是JavaScript的缩写,它是一种广泛应用于网页开发的脚本语言。JavaScript是一种解释性的、基于对象和事件驱动的编程语言,通常用于为网页增加交互性和动态性。它可以在网页上实现复杂的功能和效果,如表单验证、页面元素操作、动画效果、数据交互等。

6017

2023.08.17

JavaScript浏览器渲染机制与前端性能优化实践
JavaScript浏览器渲染机制与前端性能优化实践

本专题围绕 JavaScript 在浏览器中的执行与渲染机制展开,系统讲解 DOM 构建、CSSOM 解析、重排与重绘原理,以及关键渲染路径优化方法。内容涵盖事件循环机制、异步任务调度、资源加载优化、代码拆分与懒加载等性能优化策略。通过真实前端项目案例,帮助开发者理解浏览器底层工作原理,并掌握提升网页加载速度与交互体验的实用技巧。

1

2026.03.06

热门下载

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

精品课程

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

共58课时 | 5.8万人学习

TypeScript 教程
TypeScript 教程

共19课时 | 3.3万人学习

Bootstrap 5教程
Bootstrap 5教程

共46课时 | 3.5万人学习

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

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