es6之generator詳解
generator小試牛刀
- generator 簡介
generator:您可以將生成器視為可以暫停和恢復的程式(程式碼段),程式碼在執行的過程中可以主要交出控制權
genearator 語法:function *是一個新的關鍵字用於生成器函式(也有生成器方法)。
yield是generator可以自行暫停的運算子。此外,generator還可以通過yield接收輸入和傳送輸出。
function* genFunc() {
// (A)
console.log('First');
yield;
console.log('Second');
}
const genObj = genFunc();
genObj.next();
// Output: First
genObj.next();
// output: Second
1. 當您呼叫生成器函式genFunc()時,您將獲得可用於控制程式的生成器物件genObj
此時該生成器物件裡面的程式碼還沒有執行,該程式最初在行A中暫停。
2. genObj.next()恢復執行,
3. genFunc()中的yield將暫停執行
generator 函式的不同種類
- generator 函式
function* genFunc() {
···
}
const genObj = genFunc();
- generator函式表示式
const genFunc = function* () {
···
};
const genObj = genFunc();
- 物件中的generator方法
const obj = {
* generatorMethod() {
···
}
};
const genObj = obj.generatorMethod();
- 類中的generator方法
class MyClass {
* generatorMethod() {
···
}
}
const myInst = new MyClass();
const genObj = myInst.generatorMethod();
使用案例
有人問了,這generator有什麼用了,generator返回的物件是可迭代的;每個產量都有助於迭代值的序列。
- 使用生成器實現迭代.
function * objectEntries(obj){
const objKeys=Reflect.ownKeys(obj)
for(const objKey of objKeys){
yield [objKey,obj[objKey]]
}
}
const jane = { first: 'Jane', last: 'Doe' };
for (const [key,value] of objectEntries(jane)) {
console.log(`${key}: ${value}`);
}
- 解決非同步回撥
您可以使用generator極大地簡化與Promises的工作。我們來看看一個基於Promise的函式fetchJson()以及如何通過generator進行改進。
相關文章
- ES6中的Promise和Generator詳解Promise
- MyBatis Generator 用法詳解MyBatis
- Generator用法詳解+co
- ES6 Generator async
- ES6之路之模組詳解
- ES6 系列之 Generator 的自動執行
- ES6 Generator函式函式
- ES6中的Generator
- ES6 - symbol&generatorSymbol
- 探索es6系列之—-Generator生成器函式函式
- es6:generator生成器
- ES6 Generator 函式介紹函式
- 【深入淺出ES6】Iterator/Generator
- Es6 generator淺入淺出
- [譯] Javascript(ES6)Generator 入門JavaScript
- ES6 系列之 Babel 將 Generator 編譯成了什麼樣子Babel編譯
- ES6系列之Babel將Generator編譯成了什麼樣子Babel編譯
- js es6深入應用系列(Generator)JS
- 【ES6基礎】生成器(Generator)
- es6語法詳解
- [面試專題]ES6之箭頭函式詳解面試函式
- ES6學習筆記(六)【promise,Generator】筆記Promise
- ES6中Promise用法詳解Promise
- ES6的Generator函式(2018-06-21)函式
- MyBatis Generator 超詳細配置MyBatis
- ES6 Proxy攔截器詳解
- ES6中的迭代器、Generator函式以及Generator函式的非同步操作函式非同步
- ES6之解構賦值賦值
- 詳解es6的export和import命令ExportImport
- ES6 - Promise, Generator, async(非同步操作)使用比較Promise非同步
- javascript ES6 新特性之 解構JavaScript
- ES6 Symbol之淺入解讀?Symbol
- ES6中rest引數詳細講解REST
- CommonJS,AMD,CMD,ES6,require 和 import 詳解JSUIImport
- JavaScript之this詳解JavaScript
- 詳解JS的繼承(三)-- 圖解Es6的ExtendJS繼承圖解
- 你是怎麼理解ES6中 Generator的?使用場景?
- Flutter之ElevatedButton詳解Flutter
- CSAPP 之 CacheLab 詳解APP