Promise是干啥的?
Promise的话是es6当中新提出的概念,主要是为了控制函数异步加载的问题 同时也解决 回调地狱的问题(因为在之前的开发中,我们一般是使用ajax来调用请求, 如果现在又两个请求 a ,b ,b要在a执行结果后执行,就必须得嵌套在a返回结果succes中,如果设计多层的话,就会导致一层套一层,代码的可读性不高)
Promise的概念
Promise首先是一个对象,他返回的也是一个对象,
有三种状态 :
- pendding 等待中
- fulfiiled 完成
- rejected 失败
七个方法
- resolve()
- then()
【如果调用 resolve() 那么Promse对象的状态就会有 pendding 变更为 fulfilled,同时会执行**then()**方法】 - rejecte()
- catch()
【如果调用 reject() 就会由 pendding 变更为 rejected,同时会执行catch()】 - finaly()
**finaly()**方法不论最后执行的结果成功或者失败,都会执行这个方法 - all()
【入参是promise对象数组,执行then(回调函数) 表明,回调函数的参数是⼀个数组,按照入参顺序展示每个promise的返回结果】 - race()
【入参是promise对象数组,执行then(回调函数) 表明,回调函数的参数是前⾯数组中最快⼀个执⾏完毕的promise的返回值】
中断链式调用
如果需要中断的话,可以使用reject()或者直接爆出错误就行(throw error)
Promise实现: 可以自己封装一个Promise的,利用 setTimout和回调函数的概念,也可以实现(这里就不一一细说了)
衍生话题
async await
这两个概念是es8中提出的,主要也是为了解决异步结构代码组织的问题,相当于是Promise的语法糖
async 是用来申明异步函数的,也可以用在函数表达式或者箭头函数上,虽然是异步声明的,但其代码是同步的,如果有return 返回的值的话,就会被Promise.resolve()包装成一个Promise对象
await 可以暂停异步函数代码的执行
async和await需要成对出现,async可以单独修饰函数,但是await只能在被async修饰的函数中使⽤
【async函数中有⼀个最⼤的特点,就是第⼀个await会作为分⽔岭⼀般的存在,在第⼀个await的右侧和上⾯的代码,全部是同步代码区域相当于new Promise的回调,第⼀个await的左侧和下⾯的代码,就变成了异步代码区域相当于then的回调】