完整教程:一篇读懂Pormise!!【前端ES6】
2025-09-17 20:13 tlnshuju 阅读(0) 评论(0) 收藏 举报测试说我们程序员就爱说“不应该啊,我本地没问题呀”…
目录
- promise
- 1.promise的定义
- 2. Promise 的创建
- 3. Promise 的方法
- 3.1 实例方法
- 3.2 静态方法
- 4. Promise 链式调用
- 5. Promise 的工作机制
- 6.举个栗子
- 7. 总结
promise
==Promise 是 JavaScript 中用于处理异步操作的对象,它用来表示一个 可能现在、将来或者永远不会结束的异步操作,并且能在异步操作完成后得到结果或捕获错误。==通过 Promise,可以更加清晰地处理异步代码,避免回调地狱。
1.promise的定义
Promise 其实就是异步操作的占位符,它有三种状态:
- Pending(等待中):Promise 创建时,状态为 Pending,表示异步操作正在进行中。【初始状态】
- Fulfilled(已成功):如果异步操作成功(即调用 resolve),状态变为 Fulfilled,然后执行 .then(onFulfilled) 回调。【成功】
- Rejected(已失败):如果异步操作失败(即调用 reject),状态变为 Rejected,然后执行 .catch(onRejected) 或 .then(null, onRejected) 回调。【失败】
状态 | 含义 | 能否改变 |
---|---|---|
Pending(等待中) | 异步操作正在进行 | 可以变为 Fulfilled 或 Rejected |
Fulfilled(已成功) | 异步操作成功完成 | 不可再改变 |
Rejected(已失败) | 异步操作失败 | 不可再改变 |
注意:一旦状态从 Pending 变为 Fulfilled 或 Rejected,就 不可再改变。
2. Promise 的创建
使用 new Promise(executor) 创建一个 Promise:
const promise = new Promise((resolve, reject) =>
{
// 异步操作
const success = true;
if (success) {
resolve("操作成功");
// 变为 Fulfilled
} else {
reject("操作失败");
// 变为 Rejected
}
});
- executor 是立即执行的函数
- resolve(value):将状态变为 Fulfilled,并返回结果
- reject(reason):将状态变为 Rejected,并返回错误
3. Promise 的方法
3.1 实例方法
then(onFulfilled, onRejected)
- 当 Promise 状态为 Fulfilled 时,执行 onFulfilled。
- 当 Promise 状态为 Rejected 时,执行 onRejected(可选)。
promise.then(
result => console.log("成功:", result),
error => console.error("失败:", error)
);
catch(onRejected)
- 用于捕获失败(Rejected)状态。
- 等价于 then(null, onRejected)。
promise
.then(result => console.log(result))
.catch(error => console.error(error));
finally(callback)
- 无论 Promise 成功或失败,都会执行 callback。
- 不会修改 Promise 的值。
promise
.finally(() => console.log("操作完成"));
3.2 静态方法
方法 | 功能 |
---|---|
Promise.resolve(value) | 返回一个已成功的 Promise |
Promise.reject(reason) | 返回一个已失败的 Promise |
Promise.all(promises) | 等待所有 Promise 完成,全部成功才返回结果,否则失败 |
Promise.race(promises) | 只要第一个 Promise 完成,就返回结果或错误 |
Promise.allSettled(promises) | 等待所有 Promise 完成,不管成功或失败都返回状态 |
Promise.all([
Promise.resolve(1),
Promise.resolve(2),
Promise.resolve(3)
]).then(values => console.log(values));
// [1,2,3]
4. Promise 链式调用
- then 方法返回一个新的 Promise,可以连续调用。
- 链式调用可以顺序处理异步操作,避免回调地狱。
new Promise((resolve, reject) =>
{
resolve(1);
})
.then(result =>
{
console.log(result);
// 1
return result + 1;
})
.then(result =>
{
console.log(result);
// 2
});
5. Promise 的工作机制
- 创建 Promise → 状态为 Pending
- 执行异步操作
- 操作成功 → 调用 resolve → 状态变为 Fulfilled
- 操作失败 → 调用 reject → 状态变为 Rejected
- then / catch / finally → 注册回调函数
- 状态改变后 → 执行对应的回调函数
Promise 内部采用微任务队列(microtask)机制,回调会在当前同步代码执行完毕后才执行。
6.举个栗子
function asyncTask(flag) {
return new Promise((resolve, reject) =>
{
setTimeout(() =>
{
if (flag) {
resolve("任务完成");
} else {
reject("任务失败");
}
}, 1000);
});
}
asyncTask(true)
.then(result => console.log(result) // 任务完成 )
.catch(error => console.error(error) // 任务失败 )
.finally(() => console.log("操作结束"));
输出:
任务完成
操作结束
7. 总结
- Promise 是异步编程的解决方案
- 有三种状态:Pending、Fulfilled、Rejected
- Promise 的状态一旦改变,不能再改变(Pending -> Fulfilled 或 Rejected)
- 提供 then、catch、finally 方法处理结果(then() 用于处理成功的回调,catch() 用于处理失败的回调。)
- 支持链式调用和静态方法处理多个异步操作
- 内部机制保证状态不可逆,回调异步执行(微任务队列)
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/906809.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!相关文章
93. 递归实现组合型枚举
93. 递归实现组合型枚举
if (sum + n - u < m) return;
如果当前记录的数据 加上 后面的所有可以被选的数据 时无法达到要求时终止
state记录了哪些数据被选,哪些没被选的
state | 1 << u 选择当前的数据,比如0101 -> 10101
#include <iostream>
using n…
Sort方法学习(伪代码记录)
Sort 方法总结
selectionSort(vector& a)
核心思想:选择最大/小的数移到最前/后
// 1. 计算数组长度// 2. 控制已排序部分的边界
for(i=0; i<n; i++){// 3. 在未排序部分(j到末尾)中寻找真正的maxfor(j=i+1, j<n; j++) find(max);// 3. 将最大的数放至数组头swap(…
深入解析:【每日一问】运算放大器与比较器有什么区别?
深入解析:【每日一问】运算放大器与比较器有什么区别?pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", mon…
9.17支配对问题专题总结
概括
每次查询一定范围内的点组成的点对中的最优值,而通过一些分析去减少有用点对的数量,这样子的有用点对称为 支配对
T1策略是将 \(a_i\) 相同的序列取出来单独考虑
固定 \(b_i<b_j,i<j\) 然后考虑能找出来一个序列 \(i,j1,j2,j3...\)
但是发现选 \(i,j2\) 不如选 \(…
开源收银体系_大型收银系统源码_OctShop
开源收银体系_大型收银系统源码_OctShoppre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Mo…
完整教程:热力图是什么?三分钟学会热力图数据分析怎么做!
pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …
机器视觉检测中光源的作用以及分类 - 教程
pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …
XXL-JOB(2)
XXL-JOB(2)1、入门和集成<!-- xxl-job-core --><dependency><groupId>com.xuxueli</groupId><artifactId>xxl-job-core</artifactId><version>2.5.0</version></dependency>
搭建控制台
XXL-JOB-ADMIN jar 本地启动,…
P9753 [CSP-S 2023] 消消乐
前置算法动态规划
hash哈希题目大意
给定一个字符串,可以将相邻两个相同的字符删除,然后合并成一个新序列。
例如:abba,可以先将两个 b 删除,然后合并成 aa,最后删除 a。
求出有多少个字串,最后可以将其变为空串,我们称之为合法的字串。
思路
看到数据范围,只能使用 \…
9.16 CSP-S模拟22 改题记录
HZOJ
写在前面
连着两天吃了两坨。。。好吧,那就一坨一坨地消化一下吧。话说如果这真是S组难度那我不真就废了?这场真是T1猜结论题,T2就来坨大的,不知道啥是二分图暴力都不会打。T3反正就是我是大春竹。T4上演忘记结论创造结论,然鹅实际上还是不会写。没有文件输入输,没有…
AT_agc058_b [AGC058B] Adjacent Chmax
转化为对某个区间染色,然后设 \(f_{i, j}\) 为前 \(i\) 种颜色染了 \([1, j]\) 的方案数,简单转移即可。
Jenkins CVE-2018-1000600漏洞利用与SSRF攻击分析
本文详细分析了Jenkins GitHub插件CVE-2018-1000600漏洞的利用方法,通过CSRF漏洞和权限缺失实现凭证窃取与完全响应SSRF攻击,包含PoC代码和影响版本范围说明。Jenkins - CVE-2018-1000600 PoC
来源博客文章
https://blog.orange.tw/2019/01/hacking-jenkins-part-1-play-with…
NOIP 集训日记(学术)
workwork学术版。
9.9
P4117 [Ynoi2018] 五彩斑斓的世界
分块神题。
拿到题以后发现不能直接做,然后你就开始观察。
设区间最大值为 \(maxn\) ,查询的数为 \(x\)
一个显然的性质:把所有小于等于 \(x\) 的数加上 \(x\) ,然后区间减 \(x\) ,得到的结果不变。然后我们思考一下…
linux中mysql如何远程连接
linux中mysql如何远程连接
两个步骤:
第一:让root允许远程登录
update user set host = % where user = root;第二:给予root用户最大数据库权限
grant all privileges on *.* to root@% identified by 123456;
flush privileges;实操:
[root@bogon ~]# mysql -uroot -p1234…
详细介绍:Python:OpenCV 教程——从传统视觉到深度学习:YOLOv8 与 OpenCV DNN 模块协同实现工业缺陷检测
详细介绍:Python:OpenCV 教程——从传统视觉到深度学习:YOLOv8 与 OpenCV DNN 模块协同实现工业缺陷检测pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", …
深入解析:PYcharm——pyqt音乐播放器
深入解析:PYcharm——pyqt音乐播放器pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", monospace !important…
威联通NAS如何导入本地docker镜像
威联通NAS如何导入本地docker镜像
【前言】:有一段时间没有维护NAS docker了,笔记本电脑坏了更换后重新配置开发环境,也就没去折腾这些,有些命令忘记了,重新整理一下,输出驱动输入,还可能帮助到。欢迎大家一起友好讨论, 祝好:
【摘要】:本文主要围绕威联通NAS如何导入…