Generator生成器基礎

2022-07-09 01:42:14 字數 2265 閱讀 7850

生成器函式是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方法 這些雙下...