-
Promise是js中进行异步编程的解决方案
-
Promise是一个构造函数
-
Pormise对象可以封装异步操作,并能够返回成功/失败的结果值
-
优点
① 支持链式调用,可以解决回调地狱(回调函数嵌套回调函数)的问题 -
基本写法
javascript">new Promise((resolve, reject) => { // 封装异步任务 setTimeOut(() =>{ const num = Math.ceil(Math.random() * 10); if (num > 5) { resolve(num); } else { reject(num); } }, 2000); }).then(res => { console.log(`值大于5,值为${res}`); },error => { console.log(`值小于等于5,值为${error}`); });
-
PromiseState:存储promise状态
① pending:未返回结果的状态
② resolved/fulfilled: 成功
③ rejected:失败 -
new Promise.then(res => {}, error => {})
第一个为成功的回调,第二个为失败的回调 -
new Promise.catch(reject => {})
失败的回调 -
Promise.resolve(value)
快速得到一个成功/失败的Promise对象 -
Promise.reject(value)
快速得到一个失败的Promise对象 -
Promise.all([p1, p2])
① 传入的所有promise都为成功时,返回的Promise状态才为成功,结果为每个promise返回值的数组
② 传入的promise有一个为失败时,res状态就为失败,结果为第一个失败的promise返回值 -
Promise.race([p1, p2])
① race有比赛的意思,返回值是第一个promise的结果
② 如果p1用定时器做了延时,那么p2就会先执行,最终的返回值是p2的值 -
给Promise指定多个then回调,状态相符的都会被执行
-
异常穿透:在链式调用的最后去指定异常的回调(catch),不管在中途哪个环节出现了错误,都会被最后的异常回调所识别到
-
中断Promise执行方式:return new Promise(() => {}); return一个等待状态的promise