摘要:示例運行函數彈出彈出函數接收參數,返回值。其中,返回一個對象,是的返回值,代表函數是否執行完成。
ES6特性介紹(下)
ES6新的標準,新的語法特征:
1、變量/賦值
2、函數
3、數組/json
4、字符串
5、面向對象
6、Promise
7、generator
8、ES7:async/await
《【Web全棧課程二】ES6特性介紹(上)》見:https://segmentfault.com/a/11...
6、Promise根本作用,解決異步的操作,將異步操作寫法同步化,是es6提供給我們的語法糖(內部實現依舊是異步)
同步-串行 簡單、方便 頁面假死的現象
異步-并發 性能高、體驗好
使用wamp作為本地服務器使用
【補充:wamp用法】ajax獲取數據需要使用服務器,項目都放在www里面,訪問時按照如下對應關系轉換
本地物理地址:c:wamp64www
本地網絡地址:http://localhost/
Ajax發送請求
缺點:異步請求邏輯和結果處理邏輯耦合在一起,不便于復用和書寫
同步的簡單寫法實現異步,獲取一條url數據。Promise在ES6中被統一規范,由瀏覽器直接支持,它最大的好處是在異步執行的流程中,把執行代碼和處理結果的代碼清晰地分離
let p =new Promise((resolve, reject) => { resolve(); reject(); }); p.then(success=>{},err=>{});
補充一下ajax和Promise混用的原理,我們可以將ajax操作的返回值打印出來,發現里面有then方法、catch方法,其實它就是一個Promise對象。那么我們為什么還要使用Promise?promise的all和race能很好地處理多條異步操作。
Promise.all:接收promise數組,在所有異步操作執行完后才執行回調。 Promise.race:接收promise數組,只要有一個異步操作執行完畢就執行回調。
Promise.all([ $.ajax("/banner_data"), $.ajax("/item_data"), $.ajax("/users_data"), $.ajax("/news_data"), ]).then(arrs=>{ let [banners,items,users,news]=arrs; },err=>{});7、generator 生成器
promise只能提供race和all的邏輯操作,如果我們要實現更加復雜的異步操作,例如等待a異步操作完成后根據a的結果選擇執行b或者c,使用promise就需要寫很多的嵌套,又不能滿足我們代碼的高可用和可讀性。
這里先給大家介紹generator提供的解決方案,實際使用中generator并不方便,我們一般使用async/await,后面會提到。
1.generator函數前面有*號
function show(){} //普通函數 function *show1(){}//generator函數
2.generator函數的特點是能夠暫停,等待某個動作(異步操作)完成后繼續執行。什么時候暫停呢?我們需要告訴它暫停的時間點,我們通過yield告訴generator函數暫停,yield也只能在generator函數使用。
//generator函數 function *show(){ alert("aaa"); yield; //函數暫停 alert("bbb"); } show();
我們直接調用show(),會發現界面沒有任何效果,和我們習慣的函數順序執行使用習慣并不相同。generator函數返回的是一個generator對象,需要next()才能運行generator函數。示例:
// 運行generator函數 let gen = show(); gen.next(); //彈出aaa gen.next(); //彈出bbb
3、generator函數接收參數,返回值。其中,gen.next()返回一個對象,value是yield的返回值,done代表函數是否執行完成。
function *show(){ alert("aaa"); //let a = yield 接收next給的參數; yield 55 返回值55 let a = yield 55; alert("bbb"+","+a);//彈出bbb,23 } let gen=show(); let res1=gen.next();console.log(res1);//{value: 55, done: false} let res2=gen.next(23);console.log(res2);//{value: undefined, done: true}
以上執行,有2個點讓人疑惑
1、返回值:yield 55返回給第一個next了
2、接受參數:let a = yield接收的是第二個next傳遞進來的參數
我們用下面這張圖來很好的解釋這個原因,紅色圈出來的部分是第一個next的范圍,綠色圈出來的是第二個next的范圍。也就是說yield返回屬于上一個next,接收參數屬于下一個next。
小結:
1、箭頭函數不能寫generator函數
2、generator只是一個過渡,從例子中看到yield的使用有很多約束,也不符合我們常用的使用習慣。一般使用async/await
async/await也可以在執行中暫停,await等待一個異步操作完成后再繼續往下執行,它將異步操作同步化。await一定使用在async函數中,先來直接看下使用方式
async function show() { alert("aaa"); //12是一個數值,不是異步操作,不會進行等待 await 12; alert("bbb"); } show();
1、await后面跟一個異步操作,否則不會進行等待。如上代碼就不會進行等待。
setTimeout不是異步操作,但是如果包成promise,await就會認為它是一個異步操作,如下代碼彈出aaa后會等待2s后再彈出bbb。
function sleep(){ return new Promise((resolve,reject)=>{ setTimeout(()=>{resolve();},2000); }); } async function show() { alert("aaa"); await sleep();//等待2s alert("bbb"); } show();
2、await進行邏輯操作
我們在1.txt文件中存放{"a":12,"b":5},實現如果a+b<10則獲取2.txt,否則獲取3.txt,可以預見到結果會進去獲取3.txt的分支。
//用箭頭函數寫async函數,匿名函數 (async ()=>{ let data1 = await $.ajax({url:"../datas/1.txt",dataType:"json"}); //獲取data1的異步請求已經執行完成 if(data1.a+data1.b<10){ let data2 = await $.ajax({url:"../datas/2.txt",dataType:"json"}); console.log("2.txt"); console.log(data2); } else { let data3 = await $.ajax({url:"../datas/3.txt",dataType:"json"}); console.log("3.txt"); console.log(data3); } })();
結果如下:
小結:
1、await一定使用在async函數中
2、await必須等待一個異步操作,通常等待一個promise
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/107900.html
摘要:原因中,定義的變量沒有塊級作用域,在第一個中循環后已經是,里面的執行的時候彈出的就是。 ES6特性介紹(上) ECMAScript(簡稱ECMA、ES),ES6也被稱為ECMAScript 2015JavaScript是ECMAScript的一種,但是目前實現ECMAScript標準的僅JavaScript ES6新的標準,新的語法特征:1、變量/賦值2、函數3、數組/json4、字符...
摘要:并總結經典面試題集各種算法和插件前端視頻源碼資源于一身的文檔,優化項目,在瀏覽器端的層面上提升速度,幫助初中級前端工程師快速搭建項目。 本文是關注微信小程序的開發和面試問題,由基礎到困難循序漸進,適合面試和開發小程序。并總結vue React html css js 經典面試題 集各種算法和插件、前端視頻源碼資源于一身的文檔,優化項目,在瀏覽器端的層面上提升速度,幫助初中級前端工程師快...
摘要:并總結經典面試題集各種算法和插件前端視頻源碼資源于一身的文檔,優化項目,在瀏覽器端的層面上提升速度,幫助初中級前端工程師快速搭建項目。 本文是關注微信小程序的開發和面試問題,由基礎到困難循序漸進,適合面試和開發小程序。并總結vue React html css js 經典面試題 集各種算法和插件、前端視頻源碼資源于一身的文檔,優化項目,在瀏覽器端的層面上提升速度,幫助初中級前端工程師快...
摘要:并總結經典面試題集各種算法和插件前端視頻源碼資源于一身的文檔,優化項目,在瀏覽器端的層面上提升速度,幫助初中級前端工程師快速搭建項目。 本文是關注微信小程序的開發和面試問題,由基礎到困難循序漸進,適合面試和開發小程序。并總結vue React html css js 經典面試題 集各種算法和插件、前端視頻源碼資源于一身的文檔,優化項目,在瀏覽器端的層面上提升速度,幫助初中級前端工程師快...
閱讀 932·2023-04-25 23:40
閱讀 3712·2021-11-22 15:22
閱讀 3551·2021-10-09 09:44
閱讀 3405·2021-09-23 11:52
閱讀 1260·2021-09-22 15:43
閱讀 789·2021-09-10 10:51
閱讀 2210·2021-09-06 15:02
閱讀 3204·2021-09-06 15:02