promise是什么
顾名思义,promise就是一个承诺。承诺需要一段时间后兑现。在node中,这段时间就是异步操作执行到调用回调函数的时间。所以,promise的操作和异步操作有关。
promise的状态
- Pending Promise对象实例创建时候的初始状态
- Fulfilled 可以理解为成功的状态
- Rejected 可以理解为失败的状态
promise的简单应用
1234567891011//定义一个Promise实例,实例会立即执行传参。传参接收2个参数//resolve参数是一个函数,用以改变promise的状态以及执行成功状态的回调函数//reject参数是一个函数,用以改变promise的状态以及执行失败状态的回调函数var promise=new Promise((resolve,reject)=>{setTimeout(()=>{if (Math.random>0.5) resolve('success');else reject('fail');},1000)})//promise的实例的then方法接收两个函数参数,是对resolve与reject函数的定义promise.then(fullfiled,rejected)
源码实现思路
- 由于要实例化,所以Promise首先是一个类。constructor上有一个记录状态的变量。并且在实例化的过程中会立即执行传参。
- 原型上有一个then方法,接受两个参数,分别是成功与失败状态要调用的函数。但是由于这两个函数都有传参,所以还需要包装一下。
- 在contructor中定义resolve与reject函数,这两个函数接收传参,执行时会改变实例状态,并把传参赋给then上定义的方法并执行他。
- 在constructor中执行Promise中传入的函数,将包装好的resolve与reject传入。
源码实现
|
|