日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

JS手寫一個自定義Promise操作示例

瀏覽:235日期:2024-05-17 10:27:17

本文實例講述了JS手寫一個自定義Promise操作。分享給大家供大家參考,具體如下:

經常在面試題中會看到,讓你實現一個Promsie,或者問你實現Promise的原理,所以今天就嘗試利用class類的形式來實現一個Promise

為了不與原生的Promise命名沖突,這里就簡單命名為MyPromise.

class MyPromise { constructor(executor) { let _this = this this.state = ’pending’ // 當前狀態 this.value = undefined // 存儲成功的值 this.reason = undefined // 存儲失敗的值 // 利用發布訂閱模式,讓Promise支持異步 this.onFulfilledFunc = [] // 存儲成功的回調 this.onRejectedFunc = [] // 存儲失敗的回調 function resolve (value) { // Promise對象已經由pending狀態改變為了成功態(resolved)或是失敗態(rejected)就不能再次更改狀態了。因此我們在更新狀態時要判斷,如果當前狀態是pending(等待態)才可更新 if (_this.state === ’pending’) { _this.value = value //依次執行成功回調 _this.onFulfilledFunc.forEach(fn => fn(value)) _this.state = ’resolved’ } } function reject (reason) { // Promise對象已經由pending狀態改變為了成功態(resolved)或是失敗態(rejected)就不能再次更改狀態了。因此我們在更新狀態時要判斷,如果當前狀態是pending(等待態)才可更新 if (_this.state === ’pending’) { _this.reason = reason //依次執行失敗回調 _this.onRejectedFunc.forEach(fn => fn(reason)) _this.state = ’rejected’ } } try { // 當實例化Promise時,構造函數中就要馬上調用傳入的executor函數執行 executor(resolve, reject) } catch (error) { reject(error) } } _resolvePromise (promise2, x, resolve, reject) { // 如果返回了自己的Promise對象,狀態永遠為等待態(pending),再也無法成為resolved或是rejected,程序會死掉,因此首先要處理它 if (promise2 === x) { reject(new TypeError(’Promise存在循環引用’)) } if (x !== null && (typeof x === ’object’ || typeof x === ’function’)) { // x可能是一個promise try { let then = x.then if (typeof then === ’function’) { then.call(x, (y) => { _resolvePromise(promise2, y, resolve, reject) }) } else { resolve(x) } } catch (err) { reject(err) } } else { //否則是個普通值 resolve(x) } } then (onFulfilled, onRejected) { let promise2 onFulfilled = typeof onFulfilled === ’function’ ? onFulfilled : function (val) { return val } onRejected = typeof onRejected === ’function’ ? onRejected : function (reason) { throw reason } if (this.state === ’resolved’) { promise2 = new MyPromise((resolve, reject) => { setTimeout(() => { try { let x = onFulfilled(this.value) this._resolvePromise(promise2, x, resolve, reject) } catch (error) { reject(error) } }, 0); }) } if (this.state === ’rejected’) { promise2 = new MyPromise((resolve, reject) => { setTimeout(() => { try { let x = onRejected(this.reason) this._resolvePromise(promise2, x, resolve, reject) } catch (error) { reject(error) } }, 0); }) } if (this.state === ’pending’) { promise2 = new MyPromise((resolve, reject) => { this.onFulfilledFunc.push(() => { setTimeout(() => { try { let x = onFulfilled(this.value) this._resolvePromise(promise2, x, resolve, reject) } catch (error) { reject(error) } }, 0); }) this.onRejectedFunc.push(() => { setTimeout(() => { try { let x = onRejected(this.reason) this._resolvePromise(promise2, x, resolve, reject) } catch (error) { reject(error) } }, 0); }) }) } return promise2 }}

運行測試:

var promise = new MyPromise((resolve, reject) => { console.log(1) setTimeout(() => { resolve(2) }, 1000); console.log(3)}).then(value => console.log(value))

結果真香:

JS手寫一個自定義Promise操作示例

感興趣的朋友可以使用在線HTML/CSS/JavaScript代碼運行工具:http://tools.jb51.net/code/HtmlJsRun測試上述代碼運行效果。

更多關于JavaScript相關內容感興趣的讀者可查看本站專題:《javascript面向對象入門教程》、《JavaScript錯誤與調試技巧總結》、《JavaScript數據結構與算法技巧總結》、《JavaScript遍歷算法與技巧總結》及《JavaScript數學運算用法總結》

希望本文所述對大家JavaScript程序設計有所幫助。

標簽: JavaScript
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产精品4hu.www| 欧美亚洲国产一区| 日韩在线网址| 亚洲中字黄色| 色网在线免费观看| 日韩专区欧美专区| 国产一区二区三区视频在线| 欧美精品导航| 亚洲精品乱码日韩| 久久国产电影| 国产精品草草| 热久久久久久| 久久成人亚洲| 精品国产午夜肉伦伦影院| 欧美日韩精品免费观看视频完整| 久久福利一区| 日本美女一区| 国产一区二区三区91| av不卡免费看| 日韩一区二区三区精品| 日韩专区在线视频| 荡女精品导航| 久久国产日韩欧美精品| 麻豆精品视频在线| 国产精品a级| 宅男噜噜噜66国产日韩在线观看| 日韩精品91| 久久午夜精品| 伊人成人在线视频| 今天的高清视频免费播放成人| 欧美羞羞视频| 亚洲精品大全| 综合激情视频| 中文字幕乱码亚洲无线精品一区| 久久久久黄色| 午夜精品免费| 亚洲精品影院在线观看| 亚洲香蕉视频| 中文字幕亚洲影视| 亚洲一区二区三区中文字幕在线观看 | 欧美国产精品| 欧美日韩在线播放视频| 久久国产麻豆精品| 国产日韩欧美三级| 国产精品tv| 婷婷成人综合| 欧美网站在线| 日韩影院在线观看| 久久国产高清| 日韩欧美精品一区| 视频一区二区三区在线| 午夜精品福利影院| 欧美日韩亚洲一区三区| 免费视频一区二区三区在线观看| 久久精品99国产精品日本| 日本欧美在线| 在线天堂中文资源最新版| 亚洲精品四区| 韩日一区二区| 久久精品二区三区| 日本精品一区二区三区在线观看视频 | 国产情侣一区| 国产91在线播放精品| 国产综合色区在线观看| 国产麻豆精品久久| 中文一区二区| 91精品一区| 国产免费播放一区二区| 欧美日韩视频网站| 亚洲一区二区动漫| 亚洲精品少妇| 亚洲成a人片| 日韩欧美中文字幕电影| 久久久久久久久99精品大| 欧美午夜三级| 激情黄产视频在线免费观看| 日韩精彩视频在线观看| 免播放器亚洲| 国产精品对白久久久久粗| 欧美激情国产在线| 精品国产欧美日韩| 久久永久免费| 亚洲人成在线网站| 97人人精品| 婷婷成人在线| 蜜桃视频第一区免费观看| 日韩在线电影| 国产精品a久久久久| 日韩精品诱惑一区?区三区| 神马午夜久久| 蜜臀国产一区二区三区在线播放 | 婷婷综合社区| 香蕉精品久久| 亚洲欧美日韩国产一区| 欧美精品观看| 色偷偷色偷偷色偷偷在线视频| 欧美精品激情| 国产精品一区二区av日韩在线| 久久人人97超碰国产公开结果| 日本亚洲视频在线| 99视频精品视频高清免费| 久久精品999| 九色精品91| 国产欧美日韩一级| 91精品二区| 国产精品115| 尤物网精品视频| 免费日韩成人| 亚洲欧美日本国产| 久久久影院免费| 久久精品99国产精品日本| 亚洲国产影院| 欧美国产不卡| 午夜电影一区| 亚洲午夜一级| 久久久久国产精品一区三寸| 欧美日韩亚洲一区二区三区在线| 免费国产自久久久久三四区久久 | 日本午夜精品久久久久| 久久久久久久久久久妇女 | 欧美成人亚洲| 久久只有精品| 久久精品72免费观看| 日韩一级不卡| 日韩欧美精品| 国产视频网站一区二区三区| 日本不卡视频在线| 午夜久久一区| 欧洲亚洲一区二区三区| 欧美黑人巨大videos精品| 亚洲一区二区三区无吗| 99国产精品视频免费观看一公开 | 另类小说一区二区三区| 日韩国产在线观看| 亚洲一区二区三区免费在线观看 | 亚洲电影在线一区二区三区| 亚洲深夜视频| 成人美女视频| 国产精品qvod| 国产欧美日韩精品一区二区免费| 久久国产精品毛片| 91精品二区| 国内精品99| 国产亚洲在线| 999精品在线| 成人日韩精品| 久久久久久网| www.51av欧美视频| 久久精品天堂| 国产精品s色| 精品亚洲a∨| 欧美日韩一二| 国产一区二区中文| 欧美91福利在线观看| 欧美日韩一区二区综合| 99精品美女| 久久国产免费| 久久婷婷丁香| 一区久久精品| 午夜国产精品视频| 国产精品日本| 免费在线观看视频一区| 久久国产精品亚洲77777| 亚洲综合不卡| 综合国产精品| 91精品国产自产精品男人的天堂| 国产精品一级| 精品日韩在线| 福利在线免费视频| sm久久捆绑调教精品一区| 成人福利视频| 久久国产成人午夜av影院宅| 欧美精品一区二区久久| 亚洲精品123区| 成人国产综合| 在线一区欧美| 亚洲香蕉视频| 国产精品天天看天天狠| 精品网站999| 久久精品高清| 免费高清在线一区| 久久激情av| av高清不卡| 欧美日韩少妇| 日韩国产91| 久久中文字幕导航| 久久久久久美女精品| 亚洲激情久久| 奇米狠狠一区二区三区| 麻豆91小视频| 久久精品国产www456c0m| 亚洲欧美日韩一区在线观看| 婷婷综合福利| 成人午夜亚洲| 蜜桃tv一区二区三区| 亚洲免费毛片| 麻豆精品视频在线观看视频| 久久在线视频免费观看| 男人的天堂亚洲一区| 国产精品红桃|