promise的三种状态
Promise的三种状态:
pending、fulfilled、rejected(未决定,履⾏,拒绝),同⼀时间只能存在⼀种状态,且状态⼀旦改变就不能再变。promise是⼀个构造函
数,promise对象代表⼀项有两种可能结果(成功或失败)的任务,它还持有多个回调,出现不同结果时分别发出相应回调。
pending
1.初始化,状态:pending
pengding=>fulfilled
2.当调⽤resolve(成功),状态:pengding=>fulfilled
pending=>rejected
3.当调⽤reject(失败),状态:pending=>rejected
(2021-8-18)补充:
Promise 对象
作⽤:
1.主要⽤于异步计算
2.可以将异步队列化,按照期望的顺序执⾏,返回符合预期的结果
3.可以在对象之间传递和操作promise,帮助我们处理队列
延伸问题:什么是异步什么是同步
同步:1、2、3、4个任务按顺序执⾏,1执⾏完毕后2才会开始执⾏
异步:1、2、3、4个任务,假如1任务时间⽐较长,在执⾏1任务的同时开始执⾏其他任务,再通过回调 或者事件继续执⾏1任务,和交付任务的事件顺序⽆关。
普通异步处理:ajax异步请求、事件监听
容易出现的问题:回调地狱,剥夺return的能⼒,虽然说可以解决,但是代码结构嵌套程度深,处理复杂,不易于维护。
promise处理异步⽅式:
区别:
pending1.函数除闭包外不能保存状态,⽽promise是⼀个对象可以⽅便的保存状态
2.并为剥夺return的能⼒,因此⽆需层层传递callback,进⾏回调获取数据
3.代码风格容易理解,便于维护
4.多个⼀部等待合并便于解决
promise的三个状态:
1.pending(初始状态)、fulfilled(操作成功)、rejected(操作失败)
2.状态的转变是单⼀的,⼀经转变不会再变
例⼦:
new Promise((resolve,reject)=>{
setTimeout(()=>{resolve('hello')})//成功操作(使⽤resolve直接转变状态)
setTimeout(()=>{reject('worder')})//失败操作(使⽤reject直接转变状态)
}).then(res=>{//返回⼀个新的Promise对象
console.log(res);//操作成功(异步处理成功的回调)
}).catch(err=>{//返回⼀个新的Promise对象
console.log(err);//错误捕获(异步处理失败错误的回调)
})
如果.then和.catch连续调⽤容易出现的问题
1.多个.then和catch同时连续调⽤时,⼀旦出现catch就会绕过中间所有的.then处理直接进⼊后⾯的catch中,(状态转变成了rejected状态)
Promise.all()批量处理容易出现的问题
1.批量处理时,Promise.all([arr1,arr2])将多个数组包装成⼀个新的Promise实例,返回的就是⼀个普通的prominse对象
2.批量处理时只有当所有的⼦prominse执⾏完成并且都时成功状态时,才会返回⼀个数组集合结果,其中任何⼀个⼦promise处理失败就会转为rejected(失败)状态。
3.失败时返回的是第⼀个失败的promise对象
Promise.race()批量处理
1.参数传递处理于Promise.all()⼀样,区别是只要⼀个⼦promise成功,Promise状态就会转变为resolve(成功)状态
——————————————————————————————————————————
⼀缕阳光,后期将不定时出针对前端疑点难点的博⽂,谢谢关注!!
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论