摘要:會觸發(fā)方法第一個回調(diào)會觸發(fā)方法第二個回調(diào)或方法成功操作失敗操作會終止的執(zhí)行需要方法觸發(fā)向下執(zhí)行執(zhí)行結(jié)果實現(xiàn)的參數(shù)是一個函數(shù)有和兩個參數(shù)回調(diào)函數(shù)中會指向需要保存才會指向?qū)嵗龑ο笕N狀態(tài)分別為狀態(tài)只能從變成或者成功回調(diào)方法集合失敗回調(diào)方法集合觸
promise
// resolve()會觸發(fā)then方法第一個回調(diào), reject()會觸發(fā)then方法第二個回調(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會終止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 }實現(xiàn)promise
// Promise的參數(shù)是一個函數(shù)async,async()有resolve和reject兩個參數(shù) function Promise(async) { // 回調(diào)函數(shù)中this會指向window,需要保存才會指向Promise實例對象 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)改變成成功, 將會執(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)改變成失敗, 將會執(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方法有兩個參數(shù), 第一個異步成功后執(zhí)行的函數(shù), 第二個是異步出異常后執(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); } };實現(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)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/102818.html
摘要:彩票項目實戰(zhàn)學(xué)習(xí)記錄一完整走了一遍課程,覺得還不錯。支持正版人人有責(zé)零基礎(chǔ)教學(xué)解析彩票項目下面是項目課程的目錄路線一個項目分為三部分業(yè)務(wù)邏輯,自動構(gòu)建系統(tǒng),模擬數(shù)據(jù)和真實數(shù)據(jù)接口處理。 彩票項目實戰(zhàn)學(xué)習(xí)記錄(一) 完整走了一遍課程,覺得還不錯。 總結(jié): es6的知識點說得還算清楚,主要是為了了解和使用,不是深究,所以淺嘗即止即可,所以覺得還不錯。 完整還原了項目開發(fā)的代碼設(shè)計和開發(fā)過...
摘要:是目前最常用的轉(zhuǎn)的工具,但即使是,各瀏覽器的支持度也是不一的,因此便產(chǎn)生了本文,找出一些能夠被翻譯成兼容性高代碼的語法。不可用因為會使用到參考資料,用來查瀏覽器兼容性。到底將代碼轉(zhuǎn)換成什么鳥樣,感謝。官網(wǎng)試驗轉(zhuǎn)換后的代碼 前言 由于目前各瀏覽器對ES6兼容性較低,再加上需要兼容歷史上各種版本的瀏覽器,因此,使用編譯器將ES6語法轉(zhuǎn)譯成ES5語法則勢在必行了。babel是目前最常用的ES...
摘要:異步執(zhí)行可以用回調(diào)函數(shù)實現(xiàn)。全成功也可以通過解構(gòu)數(shù)組的方式,將展開賦值??梢砸来文玫矫總€結(jié)果。放棄暫時放棄執(zhí)行相當(dāng)于創(chuàng)建了一個對象。代表是否完成,代表函數(shù)完成,已經(jīng)到終點。是因為最終的結(jié)果需要在最后的時候返回最終結(jié)果 prosime 在JavaScript的世界中,所有代碼都是單線程執(zhí)行的。由于這個缺陷,導(dǎo)致JavaScript的所有網(wǎng)絡(luò)操作,瀏覽器事件,都必須是異步執(zhí)行。異步執(zhí)行可以...
摘要:它們都用于聲明變量。盲目使用替換后可能會導(dǎo)致預(yù)期意外的結(jié)果。有鑒于此,還是建議使用字符串,布爾和數(shù)字類型的數(shù)據(jù)類型。像使用這種下劃線命名約定在一個開源項目中,命名規(guī)則很難維持得一直很好,這樣經(jīng)常會造成一些困擾。 今天群里有小伙伴跟我聊天,問了我?guī)讉€關(guān)于ES6的問題,我才意識到,大部分初學(xué)者在學(xué)習(xí)的過程中,都是學(xué)了HTML/CSS/JS之后就開始上手學(xué)習(xí)框架了,而對于ES6的重視程度卻不...
閱讀 1089·2021-10-14 09:42
閱讀 1386·2021-09-22 15:11
閱讀 3295·2019-08-30 15:56
閱讀 1257·2019-08-30 15:55
閱讀 3623·2019-08-30 15:55
閱讀 897·2019-08-30 15:44
閱讀 2033·2019-08-29 17:17
閱讀 2081·2019-08-29 15:37