1.ajax 是典型的非同步操作,通過 generator 函式部署 ajax 操作,可以用同步的方式表達
function*main()function
request(url) );
}var it =main();
it.next();
上面**的main
函式,就是通過 ajax 操作獲取資料。可以看到,除了多了乙個yield
,它幾乎與同步操作的寫法完全一樣。注意,makeajaxcall
函式中的next
方法,必須加上response
引數,因為yield
表示式,本身是沒有值的,總是等於undefined
。
2.generator 函式的乙個重要實際意義就是用來處理非同步操作,改寫**函式
function*loadui()var loader =loadui();
//載入ui
loader.next()
//解除安裝ui
loader.next()
上面**中,第一次呼叫loadui
函式時,該函式不會執行,僅返回乙個遍歷器。下一次對該遍歷器呼叫next
方法,則會顯示loading
介面(showloadingscreen
),並且非同步載入資料(loaduidataasynchronously
)。等到資料載入完成,再一次使用next
方法,則會隱藏loading
介面。可以看到,這種寫法的好處是所有loading
介面的邏輯,都被封裝在乙個函式,按部就班非常清晰。
3.利用 generator 函式,可以在任意物件上部署 iterator 介面
function*iterentries(obj)}let myobj = ;
for(let [key, value] of iterentries(myobj))
//foo 3
//bar 7
es6基礎知識
1 箭頭操作符 var arr 1,5,6 傳統寫法 arr.foreach function v 箭頭操作符 arr.foreach v console.log v 2 字串模板 var str math.random console.log you num is 3 解構 函式解構 var x,...
ES6基礎知識清單
塊的作用域 let 恒量 const 解構陣列 array destructuring 解構物件 object destructuring 模版字串 template strings 帶標籤的模版字串 tagged templates 判斷字串裡是否包含其他字串 預設引數 default param...
ES6基礎知識(Promise 物件)
promise物件 title head body script src jquery 3.2.1.min.js script script 基礎結構 const promise new promise function resolve,reject else catch function erro...