大家应该都或多或少了解Promise(), 这里我也不废话去解释,先了解一下实现步骤:
1.promIse是一个类,new Promsie()实例化对象时,传一个 executer 会立即调用。
2.Promise的默认状态是 pedding(等待态),调用 resolve 表示成功, reject 则表示失败。
3.每个Promise都有一个实例方法 then
4.我们可以从等待态转化为成功/失败态.
下面看代码:
//promise-applay.js let Promise = require('./promise'); let p = new Promise(function(resolve,reject){ console.log('start') resolve('情人节') reject('圣诞节') }) p.then((value)=>{ console.log('success',value) },(reason)=>{ console.log('error:',reason); }) console.log('end')
// promise.js function Promise(executer){ //在promsie的内部中定义一个promise状态 let _self = this _self.status = 'pending' //默认promise的状态是pending _self.value = null _self.reason = null function resolve(value){ if(_self.status === 'pending'){ _self.status = 'resolved' //成功态 _self.value = value } } function reject(reason){ if(_self.status === 'pending'){ _self.status = 'rejected' //失败态 _self.reason = reason } } executer(resolve,reject) } Promise.prototype.then = function (onFullfilled,onRejected){ let _self = this if(_self.status === 'resolved'){ onFullfilled(_self.value) } if(_self.status === 'rejected'){ onRejected(_self.reason) } } module.exports = Promise
跟着上面步骤来理解,会发现其实也不是很难。这是面试常常会要求,也是必要技能!!!