说说Promise

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的回调

你可能感兴趣的:(javascript,Promise,async)