ES6-Generator使用与改写
生活随笔
收集整理的這篇文章主要介紹了
ES6-Generator使用与改写
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
用Generator封裝Symbol中的iterator方法:
?
注意:Generator的function后必須寫*??
?
config:分別有3個txt文件,兩個文件寫路徑,一個文件寫要輸出的內(nèi)容
前置寫法,node引入fs:
let fs = require('fs');function read(path){return new Promise((res, rej) => {fs.readFile(path, 'utf-8', (err,data) => {if(data){res(data);}else{rej(err);}})}) }?
?
當(dāng)前的迭代方法:let obj = {0: 'a',1: 'b',2: 'c',length:4,[Symbol.iterator]: function (){let index = 0;let next = () => {return {value: this[index],done: this.length == ++index}}return {next}}}console.log([...obj]);//(3)?["a", "b", "c"]for(let p of obj){console.log(p);//a b c }改寫后的方法:let obj = {0: 'a',1: 'b',2: 'c',length:3,[Symbol.iterator]: function* (){let index = 0;while(index != this.length){yield this[index++]}}}console.log([...obj]);//(2)?["a", "b"]for(let p of obj){console.log(p);//a b }
?
?
用promise解決回調(diào)地獄問題與Generator方法對比
let fs = require('fs');function read(path){return new Promise((res, rej) => {fs.readFile(path, 'utf-8', (err,data) => {if(data){res(data);}else{rej(err);}})}) }read('./number.txt').then((value) => {return read(value); }).then((value) => {return read(value); }).then((value) => {console.log(value); })以上缺點(diǎn)調(diào)用太多次then方法?
?
那么我們用Generator方法解決一下回調(diào)地獄
function * readA() {let val1 = yield read('./number.txt');let val2 = yield read(val1);let val3 = yield read(val2);return val3; } //返回Generator對象 let oG = readA();let {value, done} = oG.next();value.then((val) => {let {value, done} = oG.next(val);value.then((val) => {let {value, done} = oG.next(val);value.then((val) => {console.log(val)})}) })缺點(diǎn):與回調(diào)地獄無區(qū)別
?
Generator優(yōu)化:
注意:必須引入fs模塊才能運(yùn)行
function * readA() {let val1 = yield read('./number.txt');let val2 = yield read(val1);let val3 = yield read(val2);return val3; }function Co(oIt){return new Promise((res, rej) => {let next = (data) => {let {value, done} = oIt.next(data);if(done != true){value.then((val) => {next(val);})}else{res(value);}}next();}) }Co(readA()).then((val) => {console.log(val) })?
node有co模塊,在npm下載使用,效果一樣
轉(zhuǎn)載于:https://www.cnblogs.com/set-promise/p/ES6.html
總結(jié)
以上是生活随笔為你收集整理的ES6-Generator使用与改写的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MySQL数据库的权限管理
- 下一篇: 2.1 maven配置多镜像地址