久久久久久久视色,久久电影免费精品,中文亚洲欧美乱码在线观看,在线免费播放AV片

<center id="vfaef"><input id="vfaef"><table id="vfaef"></table></input></center>

    <p id="vfaef"><kbd id="vfaef"></kbd></p>

    
    
    <pre id="vfaef"><u id="vfaef"></u></pre>

      <thead id="vfaef"><input id="vfaef"></input></thead>

    1. 站長(zhǎng)資訊網(wǎng)
      最全最豐富的資訊網(wǎng)站

      ES6 Generator 基本使用

      ES6 Generator 基本使用

      本文實(shí)例講述了ES6 Generator基本使用方法。分享給大家供大家參考,具體如下:

      1.Generator介紹

      先來一段Generator的基礎(chǔ)代碼

      function* g(){  yield 100;  yield 200;  return 300; } let gg = g(); console.log(gg);            // Object [Generator] {} console.log(gg.next());        // { value: 100, done: false } console.log(gg.next());        // { value: 200, done: false } console.log(gg.next());        // { value: 300, done: true } console.log(gg.next());        // { value: undefined, done: true }

      首先我們看到:

      • Generator是由functinon*定義的,在generator內(nèi)部可以使用yield

      • Generator不是函數(shù),而是一個(gè)對(duì)象,并且在執(zhí)行開始就進(jìn)入暫停狀態(tài),而不是直接執(zhí)行全部操作

      • 通過next()來執(zhí)行下一步操作,返回的都是{ value: xxx, done: xxx }這樣的形式,value代表上一次操作返回的值,done有兩個(gè)值,一個(gè)是true,一個(gè)是false,表示整個(gè)流程是否全部結(jié)束。

      2.Generator異步編程

      generator是ES6中引入的異步解決方案,我們來看看它與promise處理異步的對(duì)比,來看它們的差異。

      // 這里模擬了一個(gè)異步操作 function asyncFunc(data) {  return new Promise( resolve => {   setTimeout(    function() {     resolve(data)    },1000   )  }) }

      promise的處理方式:

      asyncFunc("abc").then( res => {  console.log(res);                    // "abc"  return asyncFunc("def") }).then( res => {  console.log(res);                    // "def"  return asyncFunc("ghi") }).then( res => {  console.log(res);                    // "ghi" })

      generator的處理方式:

      function* g() {  const r1 = yield asyncFunc("abc");  console.log(r1);                            // "abc"  const r2 = yield asyncFunc("def");  console.log(r2);                            // "def"  const r3 = yield asyncFunc("ghi");  console.log(r3);                            // "ghi" }  let gg = g(); let r1 = gg.next(); r1.value.then(res => {  let r2 = gg.next(res);  r2.value.then(res => {   let r3 = gg.next(res);   r3.value.then(res => {    gg.next(res)   })  }) })

      promise多次回調(diào)顯得比較復(fù)雜,代碼也不夠簡(jiǎn)潔,generator在異步處理上看似同步的代碼,實(shí)際是異步的操作,唯一就是在處理上會(huì)相對(duì)復(fù)雜,如果只進(jìn)行一次異步操作,generator更合適。

      3.yield和yield*

      先來看兩段代碼

      function* g1() {  yield 100;  yield g2();  return 400; }  function* g2() {  yield 200;  yield 300; }  let gg = g1(); console.log(gg.next());                // { value: 100, done: false } console.log(gg.next());                // { value: Object [Generator] {}, done: false } console.log(gg.next());                // { value: 400, done: true } console.log(gg.next());                // { value: undefined, done: true }
      function* g1() {  yield 100;  yield* g2();  return 400; }  function* g2() {  yield 200;  yield 300; }  let gg = g1(); console.log(gg.next());                // { value: 100, done: false } console.log(gg.next());                // { value: 200, done: false } console.log(gg.next());                // { value: 300, done: false } console.log(gg.next());                // { value: 400, done: true }

      yield對(duì)另一個(gè)generator不會(huì)進(jìn)行遍歷,返回的是迭代器對(duì)象,而yield*會(huì)對(duì)generator進(jìn)行遍歷迭代。

      推薦教程:《JS教程》

      贊(0)
      分享到: 更多 (0)
      網(wǎng)站地圖   滬ICP備18035694號(hào)-2    滬公網(wǎng)安備31011702889846號(hào)