If (self.PromiseState!) if(self.PromiseState!) if(self.PromiseState! == ‘pending’) return

function Promise(executor){
    // Resolve and reject are functions
    
    // Add attributes
    this.PromiseState = "pending";
    this.PromiseResult = null
    
    const self = this;
    / / resolve function
    function resolve(data){
        if(self.PromiseState ! = ='pending') return
        // (1) Change the state of the object
        // this.promisestate // This is window because resolve is called directly
        self.PromiseState = 'fulfilled'
        // (2) Set the object result value
        self.PromiseResult = data
    }
    
    / / reject function
    function reject(data){
       if(self.PromiseState ! = ='pending') return
       // (1) Change the state of the object
        self.PromiseState = 'rejected'
        // (2) Set the object result value
        self.PromiseResult = data
    }
    
    // Call the executor function synchronously
    try {
        executor(resolve,reject)
    }catch(e){
        reject(e)
    }
    
}

// Add the then method
Promise.prototype.then = function(onResolved,onRejected){}Copy the code