• Promise A/+ 简单实现


    function Promise(exec){
      var self = this
      self.status = 'pending'//状态没用到。。。
      self.onResolvedList = []//当进行链式调用时,推入到列表
      self.onRejectedList = []//当进行链式调用时,推入到列表
      function resolved(reason){
        // if(self.status !== 'pending')return
        self.status = 'fulfilled'
        setTimeout(function(){//exec为同步函数时,将任务推到后面执行

          onResolvedList.forEach(function(fn){

            fn(reason)       

          })

        },0)
      }

      function rejected(reason){
        // if(self.status !== 'pending')return
        self.status = 'rejected'
        setTimeout(function(){//exec为同步函数时,将任务推到后面执行
          onRejectedList.forEach(function(fn){

            fn(reason)       

          })
        },0)
      }
      exec(resolved,rejected)//构造函数执行
    }

    Promise.prototype.then = function(resolved,rejected){
      var self = this
      self.onResolvedList.push(resolved)
      self.onRejectedList.push(rejected)
      return self
    }
    var P = new Promise(function(resolve,reject){
      // setTimeout(function(){
        resolve("resolve")
      // }, 1000)
    })
    P.then(function(value){
      console.log(value)
    }).then(function(value){
      setTimeout(function(){
        console.log(value)
      },1000)
    })

  • 相关阅读:
    RPC框架实践之:Apache Thrift
    ubuntu中安装hadoop集群
    前端开发浏览器兼容问题
    3亿(int)数据-2亿(int)数据 求差集
    mvn docker 部署 每次都需要下载包的问题
    树莓派操作记录
    mysql 实现类似开窗函数的功能
    mysql 多字段更新
    go proxy转发工作中碰到的问题
    之前项目使用的轻量的goweb框架
  • 原文地址:https://www.cnblogs.com/mooniitt/p/6774867.html
Copyright © 2020-2023  润新知