简单的实现一个promise

promise允许我们通过链式调用的方式来解决“回调地狱”问题。
(1)术语

promise 是一个对象或者函数,该对象或者函数有一个then方法
thenable是一个对象或者函数,用来定义then方法
value是promise状态成功时的值
reason时promise状态失败时的值
(2)要求

一个promise必须有三个状态:pending、resolved、rejected,状态一旦改变,就不可逆。
一个promise必须有一个then方法,then方法接受两个参数:onResolved、onRejected
为了实现链式调用,then方式必须返回一个promise

无法执行异步操作:

代码:

function myPromise(constructor) {

            let self = this;

            self.status = "pending"      //定义状态改变时的初始位置

             self.value = undefined;     //定义状态为resolve时的值

             self.reason = undefined;   //定义状态为rejected时的值

             function resolve(value) {

                     if(self.status === "pending") {

                           self.value = value;

                           self.status = "resolved"

                }

             }

             function reject(reason) {

                           if(self.status === "pending") {

                                  self.reason = reason;

                                  self.status = "rejected"

               }

            }

           //捕获构造异常

           try {

               constructor(resolve, reject);

           } catch(e)  {

                reject(e)

           }

}

 

         //同时需要在myPromise的原型上定义链式调用的then方法

          myPromise.prototype.then = (onResolved, onRejected) => {

                  let self = this;

                  switch(self.status) {

                        case "resolved": {

                                  onResolved(self.value);

                                  break;

                         }

                        case "rejected": {

                                   onRejected(self.reason);

                                    break

                         }

                          default;

                  }

           }

posted @ 2022-03-16 09:08  方头小小狮  阅读(88)  评论(0)    收藏  举报