好久没有写js了,最近需要做一个前端项目,复习了以下,分享个人的见解,仅供参考
Promise是es6提供的特性,JS本身是单线程的,js引擎线程,称为主线程,但浏览器也提供了多个线程完成异步操作。
首先看一个简单的示例
let p1 = new Promise((resolve,reject)=>{ //do some thing setTimeout(()=>{resolve()},1000) })
Promise用以对异步的操作进行管理,异步任务成功,我们便调用resolve【解决】,否则我们调用reject,即告知操作失败。
promise就是一个状态机,有三个状态:
1、初始状态 pending
2、操作成功 fulfilled
3、操作失败 rejected
状态变化后,调用对应的回调函数
在浏览器的控制台输入以上创建Promise的代码,并且让浏览器打印p1
>p1 Promise {<fulfilled>: undefined} [[Prototype]]: Promise catch: ƒ catch() constructor: ƒ Promise() finally: ƒ finally() then: ƒ then()
可见。p1 是Promise对象,其一被创建后便开始运行,状态已经是fulfilled,因为setTimeout过后,调用了resolve,继而调用then方法,处理操作成功之后的逻辑,否则调用catch函数
最后附上个人理解的状态转移图