亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > JS > 正文

ES6 Generator函數的應用實例分析

2024-05-06 16:52:47
字體:
來源:轉載
供稿:網友

本文實例講述了ES6 Generator函數的應用。分享給大家供大家參考,具體如下:

Generator 函數是 一種異步編程解決方案,Generator 函數會返回一個遍歷器對象,Generator 函數是一個普通函數,但是有兩個特征。一是,function關鍵字與函數名之間有一個星號;二是,函數體內部使用yield表達式。

認識generator函數

function * fn() { console.log('hello'); return 'Joh';}// 執行fn()時不會直接執行方法體中的代碼,它會返回一個指針, 這個指針實現了 interator接口,也就是返回一個interator對象let it = fn();// 通過調用next就會執行方法體, 返回結果是 {value:'Joh', done:true}, 其中next返回的是函數體中return的值let res = it.next();console.log(res);

generator函數中的yield 與 return

function * fn() {  // 和yield相配合,把一個generator內部分為幾個斷點來執行,每個斷點就是yield語句  // 注意 yield和return的區別: yield可以有多個,return只能有1個  yield 1;  yield 2;  yield 3;  return 4; // 可以沒有return值,done為true的value將會是undefined}let it = fn();// 在for-of 循環中只能打印done為false的value值,done為true時,程序終止for(let v of it) {  console.log(v); // 分別輸出 1 2 3}

yield 的值與賦值語句

function * fn(_name) { let name = yield _name; // yield 的默認值為undefined return name;}let it = fn('Joh');console.log(it.next()); // {value:'Joh', done:false}console.log(it.next('Tom')); // {value:'Tom', done:true} // 此處value應該為undefined,但是通過next參數的形式賦值改變了最后一個值console.log(it.next('Lily')); // {value: undefined, done:true} // 已經循環完畢,即使傳值也是undefined

yield 語句的位置與括號

function sum(a, b) { return a + b;}function * fn() { let res = sum(yield 1, 5 + (yield 3)); console.log(res); console.log('my qq: ' + (yield qq)); // yield 在一個語句中需要括起來}fn();

yield 異常捕獲

異常捕獲的方式1:

function * fn() { let qq = yield; // yield 默認返回undefined, 不會拋出異常 console.log(qq);}let g = fn();g.next(); // 第一個斷點沒有輸出// g.next('qq 11111'); // 完畢之后傳值輸出:qq 11111g.throw('error!'); // Uncaught error!

異常捕獲的方式2:

function * fn() { let qq; try {  qq = yield; // yield 默認返回undefined }catch(e){  console.log('qq have error'); }finally{  console.log(qq); }}let g = fn();g.next();g.throw('error!');// qq have error// undefined

異常捕獲的方式3:

function * fn() { let qq; qq = yield; console.log(qq);}let g = fn();g.next();try{ g.throw('error!');}catch(e){ console.log('qq have error!');}

異常捕獲的方式4:

function * fn() { let qq; try {  qq = yield ff; // ff 未定義, 所以qq不會被正確賦值 此處是非 yield 的異常 }catch(e){  console.log('err1'); } console.log(qq);}let g = fn();g.next();g.next('qq 5554');// err1// undefined

利用generator和promise結合使用,讓異步的邏輯關系,使用同步的方式書寫

function asyncF(name) { return new Promise(function(resolve){  setTimeout(function(){   resolve('my name is ' + name);  }); });}function * fn() { console.log(yield asyncF('Joh'));}let gf = fn();function exec(gf,value) { let res = gf.next(value); if(!res.done) {  if(res.value instanceof Promise) {   res.value.then(function (v) {    exec(gf, v);   })  }else{   exec(gf, res.value);  } }}exec(gf); // my name is Joh

更復雜的寫法:

function asyncF(name) { return new Promise(function(resolve){  setTimeout(function(){   resolve('my name is ' + name);  }); });}function sum(a, b) { return new Promise(function (resolve) {  setTimeout(function () {    resolve(a + b);  }); })}function * fn(name) { if((yield sum(3,5)) > 6) {  console.log(yield asyncF(name)); }else{  console.log('error'); }}let gf = fn('Joh');// generator 執行器 相當于 tj/co 模塊function exec(gf,value) { let res = gf.next(value); if(!res.done) {  if(res.value instanceof Promise) {   res.value.then(function (v) {    exec(gf, v);   })  }else{   exec(gf, res.value);  } }}exec(gf); // my name is Joh

使用純promise實現:

function asyncF(name) { return new Promise(function(resolve){  setTimeout(function(){   resolve('my name is ' + name);  }); });}function sum(a, b) { return new Promise(function (resolve) {  setTimeout(function () {    resolve(a + b);  }); })}function fn(name) { sum(3,5)  .then(function (num) {   if(num > 6) {    asyncF(name)     .then(function (v) {      console.log(v);     })   }else{    console.log('error');   }  })}fn('Joh');

使用co模塊,來代替自己寫的執行器

var co = require('co');function asyncF(name) { return new Promise(function(resolve){  setTimeout(function(){   resolve('my name is ' + name);  }); });}function sum(a, b) { return new Promise(function (resolve) {  setTimeout(function () {    resolve(a + b);  }); })}function * fn(name) { if((yield sum(3,5)) > 6) {  console.log(yield asyncF(name)); }else{  console.log('error'); }}var fnx = co.wrap(fn);fnx('Joh'); // my name is Joh

希望本文所述對大家JavaScript程序設計有所幫助。


注:相關教程知識閱讀請移步到JavaScript/Ajax教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久天天躁狠狠躁夜夜躁| 日韩欧美国产高清91| 久久成人人人人精品欧| 成人精品久久久| 久久全球大尺度高清视频| 一区二区三区久久精品| 亚洲伊人一本大道中文字幕| 狠狠久久亚洲欧美专区| 日韩精品久久久久| 日韩女在线观看| 久久人人爽人人爽爽久久| 国产精品视频免费在线观看| 国产亚洲精品久久| 亚洲直播在线一区| 亚洲精品美女在线观看播放| 精品国产31久久久久久| 国产精品黄页免费高清在线观看| 久久网福利资源网站| 日韩在线播放av| 亚洲最大成人免费视频| 不卡伊人av在线播放| 久久男人资源视频| 日韩欧美成人免费视频| 91国产美女视频| 亚洲人成网在线播放| 亚洲第一免费网站| 91产国在线观看动作片喷水| 国产精品电影久久久久电影网| 国产视频丨精品|在线观看| 久久久久成人精品| 欧美激情在线狂野欧美精品| 一区二区三区视频免费在线观看| 欧美国产日本高清在线| 在线视频日韩精品| 91免费人成网站在线观看18| 日本高清久久天堂| 亚洲精品自拍视频| 成人福利在线视频| 国产精品www色诱视频| 成人精品视频99在线观看免费| 亚洲综合国产精品| 国产日本欧美一区二区三区在线| 国产啪精品视频网站| 成人激情视频在线| 亚洲色图在线观看| 亚洲毛片在线看| 国产欧美日韩中文字幕在线| 日韩美女视频免费看| 日韩高清av在线| 亚洲第一视频网| 3344国产精品免费看| 中文字幕久精品免费视频| 亚洲精品自在久久| 国产精品精品视频| 国产精品扒开腿做爽爽爽男男| 91成人福利在线| 中文字幕国产亚洲| 久久精品久久久久久| 91在线视频导航| 久久伊人色综合| 亚洲国产精品久久久久秋霞不卡| 在线观看欧美www| 夜夜嗨av一区二区三区四区| 国内精品免费午夜毛片| 98精品国产自产在线观看| 欧美性videos高清精品| 欧洲成人在线观看| 成人中心免费视频| 日韩视频一区在线| 91久久嫩草影院一区二区| 国产欧美日韩综合精品| 久久免费视频观看| 欧美精品一本久久男人的天堂| 成人精品一区二区三区电影黑人| 91在线精品播放| 国产精品盗摄久久久| 欧美电影在线播放| 日韩福利在线播放| 日韩av免费看| 色噜噜国产精品视频一区二区| 国产精品免费在线免费| 欧美在线免费看| 亚洲美女av在线播放| 国产精品久久电影观看| 国产精品看片资源| 午夜精品一区二区三区视频免费看| 国产香蕉一区二区三区在线视频| 日韩欧美国产中文字幕| 日韩欧美aⅴ综合网站发布| 国产午夜精品全部视频在线播放| 欧美成人性生活| 色综合久久88| 中文精品99久久国产香蕉| 日韩专区在线观看| 亚洲最新在线视频| 日韩欧美在线一区| 欧美乱人伦中文字幕在线| 欧美大尺度激情区在线播放| 亚洲国产高清自拍| 美女久久久久久久久久久| 久久人人爽人人爽人人片av高请| 亚洲国产成人精品女人久久久| 日韩的一区二区| 欧美一区二区影院| 亚洲最大成人在线| 国产精品久久久久久久久久小说| 久久久噜噜噜久噜久久| 91精品国产91久久久久久最新| 不卡av电影院| 国产视频精品免费播放| 久久久久久九九九| 1769国内精品视频在线播放| 亚洲香蕉在线观看| 欧美黑人狂野猛交老妇| 国产精品视频网址| 亚洲国产97在线精品一区| 在线成人中文字幕| 国产精品久久久久久av| 欧美肥老太性生活视频| 亚洲缚视频在线观看| 最近中文字幕日韩精品| 久久伊人精品天天| 久久视频国产精品免费视频在线| 亚洲国产欧美一区二区三区久久| 日本高清视频一区| 日韩中文字幕网址| 亚洲精品短视频| 欧美精品在线第一页| 日韩人在线观看| 成人黄色激情网| 激情成人在线视频| 国内精品400部情侣激情| 97免费视频在线播放| 在线视频欧美日韩精品| 欧美一区三区三区高中清蜜桃| 日韩av资源在线播放| 久久久久久12| 国产精品国产亚洲伊人久久| 91色精品视频在线| 国产精品视频最多的网站| 国产精品久久久久91| 中文字幕久热精品在线视频| 国产在线拍揄自揄视频不卡99| 亚洲女同精品视频| 国产主播喷水一区二区| 日本久久久a级免费| 色妞色视频一区二区三区四区| 亚洲网站在线观看| 国产一区二区三区网站| 欧美国产在线视频| 欧美一级电影在线| 成人免费直播live| 亚洲男人天堂2019| 最近2019免费中文字幕视频三| 国产精品丝袜久久久久久高清| 欧美中文在线观看国产| 成人在线视频网| 国产精品美女久久久久av超清| 日韩欧美在线观看视频| 自拍偷拍亚洲在线| 精品亚洲永久免费精品| 久久国产视频网站| 久久久视频在线| 国产精品久久久久久久久久久不卡|