摘要:會(huì)觸發(fā)方法第一個(gè)回調(diào)會(huì)觸發(fā)方法第二個(gè)回調(diào)或方法成功操作失敗操作會(huì)終止的執(zhí)行需要方法觸發(fā)向下執(zhí)行執(zhí)行結(jié)果實(shí)現(xiàn)的參數(shù)是一個(gè)函數(shù)有和兩個(gè)參數(shù)回調(diào)函數(shù)中會(huì)指向需要保存才會(huì)指向?qū)嵗龑?duì)象三種狀態(tài)分別為狀態(tài)只能從變成或者成功回調(diào)方法集合失敗回調(diào)方法集合觸
promise
// resolve()會(huì)觸發(fā)then方法第一個(gè)回調(diào), reject()會(huì)觸發(fā)then方法第二個(gè)回調(diào)或catch方法 let p = new Promise((resolve, reject) => { setTimeout(() => { if (Math.random() > 0.5) { resolve("成功操作"); } else { reject("失敗操作"); } }); }); p.then( res => { console.log(res); }, err => { console.log(err); } );generator
// yield會(huì)終止fn()的執(zhí)行,需要next()方法觸發(fā)fn()向下執(zhí)行 function* fn(x) { yield x[0]; yield x[1]; yield x[2]; } let res; let t = fn([1, 2, 3]); do { res = t.next(); console.log(res); } while (!res.done); // 執(zhí)行結(jié)果 // { value: 1, done: false } // { value: 2, done: false } // { value: 3, done: false } // { value: undefined, done: true }實(shí)現(xiàn)promise
// Promise的參數(shù)是一個(gè)函數(shù)async,async()有resolve和reject兩個(gè)參數(shù) function Promise(async) { // 回調(diào)函數(shù)中this會(huì)指向window,需要保存才會(huì)指向Promise實(shí)例對(duì)象 let _this = this; // Promise三種狀態(tài),分別為pending,resolved,rejected.狀態(tài)只能從pending變成resolved或者rejected _this.status = "pending"; _this.val = undefined; // 成功回調(diào)方法集合 _this.onResolvedCallbacks = []; // 失敗回調(diào)方法集合 _this.onRejectedCallbacks = []; // 觸發(fā)resolve()方法異步狀態(tài)改變成成功, 將會(huì)執(zhí)行成功回調(diào)集合中的方法 function resolve(val) { if (_this.status === "pending") { _this.status = "resolved"; _this.val = val; _this.onResolvedCallbacks.forEach(item => item(val)); } } // 觸發(fā)reject()方法異步狀態(tài)改變成失敗, 將會(huì)執(zhí)行失敗回調(diào)集合中的方法 function reject(val) { if (_this.status === "pending") { _this.status = "rejected"; _this.val = val; _this.onRejectedCallbacks.forEach(item => item(val)); } } // 異常捕獲 try { async(resolve, reject); } catch (err) { reject(err); } } // then方法有兩個(gè)參數(shù), 第一個(gè)異步成功后執(zhí)行的函數(shù), 第二個(gè)是異步出異常后執(zhí)行的函數(shù) Promise.prototype.then = function(resolved, rejected) { let _this = this; if (_this.status === "pending") { // 將所有then要執(zhí)行的方法push到回調(diào)函數(shù)集合中,在狀態(tài)改為resolved執(zhí)行其中的方法 _this.onResolvedCallbacks.push(resolved); // 將所有then要執(zhí)行的方法push到回調(diào)函數(shù)集合中,在狀態(tài)改為rejected執(zhí)行其中的方法 _this.onRejectedCallbacks.push(rejected); } if (_this.status === "resolved") { resolved(_this.val); } if (_this.status === "rejected") { rejected(_this.val); } };實(shí)現(xiàn)generator
// 生成器 function fn(val) { let i = 0; return { next() { let done = i === val.length; let value = val[i++]; return { value, done }; } }; } // 迭代器 let it = fn([1, 2, 3]); let result; do { result = it.next(); console.log(result); } while (!result.done);
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/102818.html
摘要:彩票項(xiàng)目實(shí)戰(zhàn)學(xué)習(xí)記錄一完整走了一遍課程,覺(jué)得還不錯(cuò)。支持正版人人有責(zé)零基礎(chǔ)教學(xué)解析彩票項(xiàng)目下面是項(xiàng)目課程的目錄路線一個(gè)項(xiàng)目分為三部分業(yè)務(wù)邏輯,自動(dòng)構(gòu)建系統(tǒng),模擬數(shù)據(jù)和真實(shí)數(shù)據(jù)接口處理。 彩票項(xiàng)目實(shí)戰(zhàn)學(xué)習(xí)記錄(一) 完整走了一遍課程,覺(jué)得還不錯(cuò)。 總結(jié): es6的知識(shí)點(diǎn)說(shuō)得還算清楚,主要是為了了解和使用,不是深究,所以淺嘗即止即可,所以覺(jué)得還不錯(cuò)。 完整還原了項(xiàng)目開(kāi)發(fā)的代碼設(shè)計(jì)和開(kāi)發(fā)過(guò)...
摘要:是目前最常用的轉(zhuǎn)的工具,但即使是,各瀏覽器的支持度也是不一的,因此便產(chǎn)生了本文,找出一些能夠被翻譯成兼容性高代碼的語(yǔ)法。不可用因?yàn)闀?huì)使用到參考資料,用來(lái)查瀏覽器兼容性。到底將代碼轉(zhuǎn)換成什么鳥(niǎo)樣,感謝。官網(wǎng)試驗(yàn)轉(zhuǎn)換后的代碼 前言 由于目前各瀏覽器對(duì)ES6兼容性較低,再加上需要兼容歷史上各種版本的瀏覽器,因此,使用編譯器將ES6語(yǔ)法轉(zhuǎn)譯成ES5語(yǔ)法則勢(shì)在必行了。babel是目前最常用的ES...
摘要:異步執(zhí)行可以用回調(diào)函數(shù)實(shí)現(xiàn)。全成功也可以通過(guò)解構(gòu)數(shù)組的方式,將展開(kāi)賦值。可以依次拿到每個(gè)結(jié)果。放棄暫時(shí)放棄執(zhí)行相當(dāng)于創(chuàng)建了一個(gè)對(duì)象。代表是否完成,代表函數(shù)完成,已經(jīng)到終點(diǎn)。是因?yàn)樽罱K的結(jié)果需要在最后的時(shí)候返回最終結(jié)果 prosime 在JavaScript的世界中,所有代碼都是單線程執(zhí)行的。由于這個(gè)缺陷,導(dǎo)致JavaScript的所有網(wǎng)絡(luò)操作,瀏覽器事件,都必須是異步執(zhí)行。異步執(zhí)行可以...
摘要:它們都用于聲明變量。盲目使用替換后可能會(huì)導(dǎo)致預(yù)期意外的結(jié)果。有鑒于此,還是建議使用字符串,布爾和數(shù)字類(lèi)型的數(shù)據(jù)類(lèi)型。像使用這種下劃線命名約定在一個(gè)開(kāi)源項(xiàng)目中,命名規(guī)則很難維持得一直很好,這樣經(jīng)常會(huì)造成一些困擾。 今天群里有小伙伴跟我聊天,問(wèn)了我?guī)讉€(gè)關(guān)于ES6的問(wèn)題,我才意識(shí)到,大部分初學(xué)者在學(xué)習(xí)的過(guò)程中,都是學(xué)了HTML/CSS/JS之后就開(kāi)始上手學(xué)習(xí)框架了,而對(duì)于ES6的重視程度卻不...
閱讀 1076·2021-10-14 09:42
閱讀 1369·2021-09-22 15:11
閱讀 3285·2019-08-30 15:56
閱讀 1243·2019-08-30 15:55
閱讀 3612·2019-08-30 15:55
閱讀 889·2019-08-30 15:44
閱讀 2028·2019-08-29 17:17
閱讀 2071·2019-08-29 15:37