手寫一個promise

// 聲明三種狀態(tài)機
const STATUS = {
  PENDING: 0,
  FULFILLED: 1,
  REJECTED: 2
}

function Promise(exector){
  this.status = STATUS.PEDNDING
  // resolve返回的數(shù)據
  this.resolveData = null
  // reject返回的數(shù)據
  this.rejectData = null
  // 緩存成功回調的函數(shù)
  this.onFulfilledList = []
  // 緩存失敗回調的函數(shù)
  this.onRejectedList = []
  let self = this;
  // 成功時執(zhí)行
  function onResolve(resolveData){
    if(self.status === STATUS.PENDING){
      self.resolveData = resolveData
      self.status = STATUS.FULFILLED
      self.onFulfilledList.forEach(fn=>fn()) 
    }
  }
  //失敗時執(zhí)行
  function onReject(rejectData ){
      if(self.status === STATUS.PENDING){
      self.rejectData = rejectData
      self.status = STATUS.REJECTED
      self.onRejectedList.forEach(fn=fn())
    }
  }
  try {
    exector(onResolve, onReject)
  }catch(e){
    onReject(e)
  }
}

// 添加then 方法
Promise.prototype.then = function(onSucess, onError){
  let self = this
  if(this.status === STATUS.FULFILLED){
    onSucess(self.resolveData)
  }
  if(this.status === STATUS.REJECTED){
    onError(self.rejectData)
  }
  // 如果異步執(zhí)行則為pending 狀態(tài)
  if(this.status === STATUS.PENDING){
    // 保存回調函數(shù)
    this.onFulfilledList.push(()=>{
      onSucess(self.resolveData)
    })
    this.onRejectedList.push(()=>{
      onError(self.rejectData)
    })
  }
}
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末银舱,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子芬位,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,331評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件粗卜,死亡現(xiàn)場離奇詭異晤揣,居然都是意外死亡桥爽,警方通過查閱死者的電腦和手機径簿,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,372評論 3 398
  • 文/潘曉璐 我一進店門膘魄,熙熙樓的掌柜王于貴愁眉苦臉地迎上來穿稳,“玉大人呛凶,你說我怎么就攤上這事哑芹∏仗” “怎么了履恩?”我有些...
    開封第一講書人閱讀 167,755評論 0 360
  • 文/不壞的土叔 我叫張陵识脆,是天一觀的道長甸祭。 經常有香客問我缕碎,道長,這世上最難降的妖魔是什么淋叶? 我笑而不...
    開封第一講書人閱讀 59,528評論 1 296
  • 正文 為了忘掉前任阎曹,我火速辦了婚禮伪阶,結果婚禮上,老公的妹妹穿的比我還像新娘处嫌。我一直安慰自己栅贴,他們只是感情好,可當我...
    茶點故事閱讀 68,526評論 6 397
  • 文/花漫 我一把揭開白布熏迹。 她就那樣靜靜地躺著檐薯,像睡著了一般。 火紅的嫁衣襯著肌膚如雪注暗。 梳的紋絲不亂的頭發(fā)上坛缕,一...
    開封第一講書人閱讀 52,166評論 1 308
  • 那天,我揣著相機與錄音捆昏,去河邊找鬼赚楚。 笑死,一個胖子當著我的面吹牛骗卜,可吹牛的內容都是我干的宠页。 我是一名探鬼主播,決...
    沈念sama閱讀 40,768評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼寇仓,長吁一口氣:“原來是場噩夢啊……” “哼举户!你這毒婦竟也來了?” 一聲冷哼從身側響起遍烦,我...
    開封第一講書人閱讀 39,664評論 0 276
  • 序言:老撾萬榮一對情侶失蹤俭嘁,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后服猪,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體供填,經...
    沈念sama閱讀 46,205評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,290評論 3 340
  • 正文 我和宋清朗相戀三年蔓姚,在試婚紗的時候發(fā)現(xiàn)自己被綠了捕虽。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片慨丐。...
    茶點故事閱讀 40,435評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡坡脐,死狀恐怖,靈堂內的尸體忽然破棺而出房揭,到底是詐尸還是另有隱情备闲,我是刑警寧澤,帶...
    沈念sama閱讀 36,126評論 5 349
  • 正文 年R本政府宣布捅暴,位于F島的核電站恬砂,受9級特大地震影響,放射性物質發(fā)生泄漏蓬痒。R本人自食惡果不足惜泻骤,卻給世界環(huán)境...
    茶點故事閱讀 41,804評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧狱掂,春花似錦演痒、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,276評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至器虾,卻和暖如春讯嫂,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背兆沙。 一陣腳步聲響...
    開封第一講書人閱讀 33,393評論 1 272
  • 我被黑心中介騙來泰國打工欧芽, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人葛圃。 一個月前我還...
    沈念sama閱讀 48,818評論 3 376
  • 正文 我出身青樓渐裸,卻偏偏與公主長得像,于是被迫代替她去往敵國和親装悲。 傳聞我的和親對象是個殘疾皇子昏鹃,可洞房花燭夜當晚...
    茶點故事閱讀 45,442評論 2 359

推薦閱讀更多精彩內容

  • 不要被then需要異步執(zhí)行嚇到了,then傳入的是個函數(shù)诀诊,什么時候調用洞渤,應該由第一次回調決定靜態(tài)的all、race...
    Kagashino閱讀 2,236評論 0 0
  • 這里我們先啰嗦一下Promise的概念:什么是promise Promise 是異步編程的一種解決方案属瓣,比傳統(tǒng)的解...
    d5fd51dd2b60閱讀 11,939評論 2 8
  • 前言 JSONP以前研究過载迄,最近又有點忘了,寫篇本文mark一下抡蛙,旨在理解記住JSONP的原理及其實現(xiàn)护昧。代碼實現(xiàn)用...
    ITgecko閱讀 5,415評論 0 6
  • Promise標準了解一下 傳送門1?? ??Promises/A+規(guī)范 傳送門2?? ??阮一峰前輩ECMAScri...
    Rocky_Wong閱讀 1,655評論 0 6
  • 邁著細小的步子 沿著石壁往上走 水順著頭頂流到心底 從心里流到石梯上 雨下的越來越大 心中的雨也下個不停 順著雨從...
    憂傷的熨斗閱讀 197評論 0 0