摘要:下邊就手寫一個(gè)簡(jiǎn)單版本的。首先要了解的基本用法,是一個(gè)原生支持的構(gòu)造函數(shù),需要傳入一個(gè)自定義函數(shù),接受兩個(gè)參數(shù)和,接受成功數(shù)據(jù)回調(diào),用于處理異常。基本用法為以下為的原生簡(jiǎn)單實(shí)現(xiàn),滿足了的簡(jiǎn)單調(diào)用使用方法同的使用方法一樣
javascript es6標(biāo)準(zhǔn)中的 Promise對(duì)象在js編程中使用量很大,使用Promise可以讓異步邏輯在開發(fā)中清晰很多,了解其原理則有益在開發(fā)過程中更清晰的使用Promise對(duì)象,或者能在沒有Promise原生支持的es5標(biāo)準(zhǔn)下簡(jiǎn)單的造一個(gè)Promise對(duì)象出來。下邊就手寫一個(gè)簡(jiǎn)單版本的Promise。 首先要了解Promise的基本用法,Promise是一個(gè)原生支持的構(gòu)造函數(shù),需要傳入一個(gè)自定義函數(shù),接受兩個(gè)參數(shù) resolve和reject,resolve接受成功數(shù)據(jù)回調(diào),reject用于處理異常。基本用法為:
var exp1 = new Promise(function(resolve,reject){ try{ setTimeout(function(){ xxx resolve(xx) },3000) }catch(e){ reject(e) } }) exp1.then(function(data){ xxx })
以下為es5的原生簡(jiǎn)單實(shí)現(xiàn),滿足了then的簡(jiǎn)單調(diào)用
function PromiseX(fun){ var _this = this; this.status = "pendding"; this.data = null; this.error = null; var resolve = function(data){ _this.changeStatus("success"); _this.thenCb&&_this.thenCb(data); _this.data = data; } var reject = function(e){ _this.changeStatus("error"); _this.thenErrCb&&_this.thenErrCb(e); _this.error = e; } fun&&fun(resolve,reject) } PromiseX.prototype.then = function(cb,errCb){ if(this.data){ cb&&cb(this.data); } if(this.error){ errCb&&errCb(this.error); } this.thenCb = cb; this.thenErrCb = errCb; return this; } PromiseX.prototype.changeStatus = function(status){ this.status = status; }
使用方法同es6的使用方法一樣
var testPromiseX = new PromiseX(function(resolve){ setTimeout(function(){ resolve(1) },3000) }) testPromiseX.then(function(res){ alert(res) })
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/103844.html
摘要:有一個(gè)和相關(guān)的更大的問題。最后,請(qǐng)負(fù)有責(zé)任感并且使用安全的擴(kuò)展。深入理解五部曲異步問題深入理解五部曲轉(zhuǎn)換問題深入理解五部曲可靠性問題深入理解五部曲擴(kuò)展性問題深入理解五部曲樂高問題最后,安利下我的個(gè)人博客,歡迎訪問 原文地址:http://blog.getify.com/promis... 現(xiàn)在,我希望你已經(jīng)看過深入理解Promise的前三篇文章了。并且假設(shè)你已經(jīng)完全理解Promises...
摘要:用原生寫一個(gè)多動(dòng)癥的簡(jiǎn)歷預(yù)覽地址源碼地址最近在知乎上看到方應(yīng)杭用寫了一個(gè)會(huì)動(dòng)的簡(jiǎn)歷,覺得挺好玩的,研究一下其實(shí)現(xiàn)思路,決定試試用原生來實(shí)現(xiàn)。 用原生js寫一個(gè)多動(dòng)癥的簡(jiǎn)歷 預(yù)覽地址源碼地址 最近在知乎上看到@方應(yīng)杭用vue寫了一個(gè)會(huì)動(dòng)的簡(jiǎn)歷,覺得挺好玩的,研究一下其實(shí)現(xiàn)思路,決定試試用原生js來實(shí)現(xiàn)。 showImg(https://segmentfault.com/img/remot...
摘要:結(jié)果證明,對(duì)于以上瀏覽器,在生產(chǎn)環(huán)境使用是可行的。后面可以跟對(duì)象,表示等待才會(huì)繼續(xù)向下執(zhí)行,如果被或拋出異常則會(huì)被外面的捕獲。,,都是現(xiàn)在和未來解決異步的標(biāo)準(zhǔn)做法,可以完美搭配使用。這也是使用標(biāo)準(zhǔn)一大好處。只允許外部傳入成功或失敗后的回調(diào)。 showImg(https://cloud.githubusercontent.com/assets/948896/10188666/bc9a53...
摘要:執(zhí)行函數(shù)會(huì)返回一個(gè)遍歷器對(duì)象,每一次函數(shù)里面的都相當(dāng)一次遍歷器對(duì)象的方法,并且可以通過方法傳入自定義的來改變函數(shù)的行為。函數(shù)可以通過配合函數(shù)更輕松更優(yōu)雅的實(shí)現(xiàn)異步編程和控制流管理。它和構(gòu)造函數(shù)的不同點(diǎn)類的內(nèi)部定義的所有方法,都是不可枚舉的。 let const的命令 在ES6之前,聲明變量只能用var,var方式聲明變量其實(shí)是很不合理的,準(zhǔn)確的說,是因?yàn)镋S5里面沒有塊級(jí)作用域是很不合...
閱讀 3033·2021-10-13 09:39
閱讀 1880·2021-09-02 15:15
閱讀 2439·2019-08-30 15:54
閱讀 1803·2019-08-30 14:01
閱讀 2602·2019-08-29 14:13
閱讀 1411·2019-08-29 13:10
閱讀 2731·2019-08-28 18:15
閱讀 3870·2019-08-26 10:20