日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

手动实现Promise

發布時間:2025/5/22 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 手动实现Promise 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

基本原理

今天心血來潮,哈哈,就想寫個promise對象,需要說的是,我沒有參考誰的代碼,也沒有去看promise的源碼,當然,我實現的是一個乞丐版的promise,只有then & catch 的功能,其中catch只能抓取一次。僅供大伙閑暇看看,打發下時間。代碼注釋簡單說了下,如下:

import _ from 'lodash'var compose = _.flowRightclass Xpromise {constructor(f) {this._value = f.bind(undefined, this.resolve, this.reject) // 為傳入的 函數 綁定resolve & reject 方法this.chain = undefined // 把then傳入的方法 通過compose 處理成鏈式調用this.errFunc = [] // 把catch 傳入的方法setTimeout( () => { // 如果new 一個新的對象,傳入的函數不是異步的,則chain & errFunc 拿不到就執行了。所以使用定時器延時執行。this.errHandle(this._value)()}, 0)this.status = 'pending' // 設置Xpromise 狀態 主要作用是 確保resolve & reject只能執行其中一個return this}resolve = (data) => {if(this.status == 'pending')this.status = 'resolved'this.status == 'resolved' && this.chain && this.chain(data)}reject = (data) => {if(this.status == 'pending')this.status = 'rejected'this.status = 'rejected' && this.errFunc[0](data)}then = (f) => {this.chain = this.chain? compose(this.errHandle(f), this.chain): this.errHandle(f)return this}errHandle = (f) => {// 為每個傳入的函數包裹 錯誤檢查 代碼return function() {var args = Array.prototype.slice.call(arguments, 0)try{return f.apply(f,args)}catch(e){if(this.errFunc.length !== 0)this.errFunc[0](e)elsethrow new Error(e)return}}}catch = (f) => {this.errFunc.push(f)return this} }

總結

以上是生活随笔為你收集整理的手动实现Promise的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。