Promise的使用
一、Promise是什么?
1:Promise是一个构造函数,用来异步编程的一种解决方案;
主要用于异步计算、解决回调地狱问题
没有剥夺函数return的能力,因此无需层层回调
可以在对象之间传递和操作promise,帮助我们处理队列
可以将异步操作队列化,按照期望的顺序执行,返回符合预期的结果
2:异步常见的场景:事件监听、回调等
二、Promise的状态
Promise有三种状态:
1:pending(待定)初始状态
2:resolved(完成fulfilled)操作成功
3:rejected(失败)操作失败
Promise对象状态的改变只有两种情况:
1:pending - resloved (初始状态到操作成功)
2:pending - rejected (初始状态到操作失败)
#promise的状态改变,就会触发then()里的响应函数处理后续步骤,
Promise对象有以下两个特点:
1:Promise对象不受外界影响:
只有异步操作的结果才会决定Promise的状态,任何其他操作都不会改变这个结果。
2:Promise的状态一经改变,状态将不会再改变,任何时候都能得到这个结果
只要状态改变了,则状态就凝固了,不会在变了,会一直保持这个结果;就算状态已经改变了,你再对Promise添加回调函数,也会立即那到这个结果。
这个与事件不同,事件一但错过了,你再去监听它,是得不到结果的
三、Promise的基本使用
1:Promise构造函数接受一个函数作为参数,两个参数分别为resolve和reject方法
let P = new Promise(function(resolve,reject){ if(/*如果异步操作成功*/) { resolve('操作成功') } else { reject('操作失败') } }) //一、 promise对象 then方法中有两个参数,分别为函数,第一个参数是操作成功函数,第二个参数是操作失败函数 P.then(function(res) { // 返回操作成功的响应函数 },function(err){ // 返回操作失败的响应函数 }) // 二、promise对象除了then方法,还有一个catch方法,来捕获操作错误 p.then(res => {}).catch(err => {})
###注意:当我们new了一个对象,并没有调用它,我们传进的函数已经执行了;所以,我们用Promise时一般会包裹在函数中,在需要的时候调用这个函数。
2:Promise有一些缺点
#无法取消promise,一旦新建他它就会立即执行,无法中途取消
#如果不设置回调函数,promise内部抛出的错误,不会反应到外部
#当处于pending阶段时,无法判断当前什么状态
四、Promise的常用api
1:Promise.resolve()
2:Promise.reject()
3:Promise.prototype.then()
4:Promise.prototype.catch()
5:Promise.all([P1, P2, P3])
all()可以将多个promise方法封装成一个新的promise对象
全部完成后才会进入then()方法,返回的是一个数组;否则会进入catch()方法 ,返回的是最先reject的值
6:Promise.race([P1, P2, P3])
里面那个结果捕获的快,就返回那个结果,不管结果本身是成功状态还是失败状态;实际项目中使用较少
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现