生成器函式是es6提供的一種非同步程式設計解決方案,語法行為與傳統函式完全不同
function* gen()
let iterator = gen();
console.log(iterator);//不會輸出hello 是乙個迭代器物件 需要呼叫next方法才會輸出
iterator.next();
輸出結果:
yield相當於函式**的分隔符
function* gen()
let iterator = gen();
iterator.next(); //第一次呼叫next 11111
iterator.next();
iterator.next();
iterator.next();
iterator.next();
yield將函式分割為:
結果:
因為是迭代器物件,所以可以遍歷
function* gen()
let iterator = gen();
for(let v of iterator)
每一次呼叫返回的結果是yield後面的表示式
這樣更清楚:
整體函式和next方法都可以傳參
function *gen(arg)
let iterator = gen('aaa');
console.log(iterator.next());
//next方法可以傳入實參
console.log(iterator.next('bbb')); //第二次呼叫next傳入的引數作為第乙個yield語句整體返回的結果
console.log(iterator.next('ccc')); //第三次呼叫next傳入的引數作為第二個yield語句整體返回的結果
console.log(iterator.next('ddd')); //第四次呼叫next傳入的引數作為第三個yield語句整體返回的結果
常見非同步程式設計 檔案操作 網路操作 (ajax,request) 資料庫操作
栗子1:
//1s後後台列印1111 2s後列印2222 3s後列印3333
//解決**地獄
/*settimeout(function () ,3000)
},2000)
},1000);*/
function one() ,1000)
}function two() ,2000)
}function three() ,3000)
}function *gen()
let iterator = gen();
iterator.next();
栗子2:
//模擬 獲取使用者資料 再訂單資料 再商品資料 是有先後順序的
function getusers() ,1000)
} function getorders() ,1000)
} function getgoods() ,1000)
} function *gen()
let iterator = gen();
iterator.next();
Python程式設計 generator生成器
列表生成式 lst for i in range 10 print lst 0,2,4,6,8,10,12,14,16,18 相當於 lst i 2 for i in range 10 print lst 0,2,4,6,8,10,12,14,16,18 lst i 2 for i in range...
PHP 生成器Generator理解
寄凡 風雪之隅 php手冊 生成器 generator 引用自官網 生成器提供了一種更容易的方法來實現簡單的物件迭代,相比較定義類實現iterator介面的方式,效能開銷和複雜性大大降低。生成器允許你在foreach 塊中寫 來迭代一組資料而不需要在記憶體中建立乙個陣列,那會使你的記憶體達到上限 劃...
Python高階 生成器(Generators)
迭代器是乙個讓程式設計師可以遍歷乙個容器 特別是列表 的物件。然而,乙個迭代器在遍歷並讀取乙個容器的資料元素時,並不會執行乙個迭代。維基百科 可迭代物件 iterable python中任意的物件,只要它定義了可以返回乙個迭代器的iter方法,或者定義了可以支援下標索引的getitem方法 這些雙下...