手写Promise

发布时间:2024年01月03日

@1 首先promise是一个构造函数,需要new一个实例对象。new Promise((resolve,reject)=>
???????{resolve(10)})。 参数是一个方法,方法里面的参数又是两个改变状态的方法和返回值的方
????????法。而且状态值进行修改后就不可以再进行修改了。

@2 function Promise(callback){
? ? ? ? ? ? ? ? var self = this // 这里是为了方便下面change函数中使用this
? ? ? ? ? ? ? ? self.status = 'pending' // 状态值
? ? ? ? ? ? ? ? self.result = undefiend // 返回值
? ? ? ? ? ? ? ? if(typeof callback !== 'function') throw new Error('callback is not a function') // 判断类型
? ? ? ? ? ? ? ? if(!(self instanceof Promise)) throw new TypeError('undefiend is not a promise')//判断
? ? ? ? ? ? ? ? // 创建一个修改状态和返回值得方法
? ? ? ? ? ? ? ? const change = function (state,result) {
? ? ? ? ? ? ? ? ? ? ? ? if(self.state!=='pending') return ;? 判断这里说明对状态修改过了 不再进行修改了
? ? ? ? ? ? ? ? ? ? ? ? self.state = state
? ? ? ? ? ? ? ? ? ? ? ? self.result = result
????????????????}
? ? ? ? ? ? ? ? try{? // 捕获 callback方法执行成功还是失败
????????????????????????callback(? // 执行传递进来的方法
? ? ? ? ? ? ? ? ????????????????function resolve (value) { // value接受的传递返回值的参数
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? change('fulfilled',value) // 调用成功的方法
????????????????????????????????}
? ? ? ? ? ? ? ? ????????????????function reject (value) { //?// value接受的传递返回值的参数
???????????????????????????????????????? change('rejected',value) // 调用失败的方法
????????????????????????????????}
????????????????????????)

????????????????}catch(_){ // 函数执行失败的时候需要将错误信息以及状态值进行修改
? ? ? ? ? ? ? ? ? ? ? ? ? ?change('rejected', _.message) // 调用修改状态信息和返回值的方法
????????????????}
????????}
? ? ? ? 执行构造函数:let p = new Promise((resolve,reject)=>{resolve(10)})
? ? ? ?

文章来源:https://blog.csdn.net/h960822/article/details/135349485
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。