成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

Generator函數(shù)

warkiz / 1911人閱讀

摘要:使用同步化異步函數(shù)的幾個(gè)步驟將異步代碼的每一步都封裝成一個(gè)普通的函數(shù)定義一個(gè)生成器函數(shù)把流程寫進(jìn)去定義一個(gè)變量賦值為遍歷器對(duì)象生成器變量名

基本概念

Generator 是ES6的一種異步編程結(jié)局方案。
狀態(tài)機(jī) (封裝了多個(gè)內(nèi)部狀態(tài) ) 遍歷器對(duì)象生成

 function* helloWorldGenderator() {
        yield "hello";
        yield "world";
        return "ending";
    }
    var hw=helloWorldGenderator();

有兩個(gè)狀態(tài) hw是指向一個(gè)內(nèi)部狀態(tài)對(duì)的指針對(duì)象

    function* helloWorldGenderator() {
        yield "hello";
        yield "world";
        return "ending";
    }
    var hw=helloWorldGenderator();
    console.log(hw.next())  //{done:false value:"hello"}
    console.log(hw.next())  //{done:false value:"hello"}
    console.log(hw.next()) //{done:true value:"hello"}

生成的遍歷器之間彼此不受影響

   function* g() {
    var o=1;
     yield o++;
     yield o++;
     yield o++;
   }
   var gen=g();
   console.log(gen.next())   //1
   var xx=g();
   console.log(xx.next())  //1
   console.log(gen.next())  //2
   console.log(xx.next())   //2

當(dāng)調(diào)用next() 方法的時(shí)候 從上一個(gè)yield開始執(zhí)行 遇到y(tǒng)ield就會(huì)暫停執(zhí)行 并返回yield后邊的值

使用 for of方法自動(dòng)可以遍歷 遍歷器對(duì)象
 function* g() {
       yield 1;
       yield 2;
       yield 3;
       yield 4;
       yield 5;
       return 6;
   }
   let a=g();
  for(let i of a){
      console.log(i)  //1 2 3 4 5
  }

實(shí)現(xiàn)菲薄齊納函數(shù)

function* ff() {
      let [prev,curr]=[0,1];
      for(;;){
          [prev,curr]=[curr,prev+curr];
          console.log("---------")
          yield  curr;
      }
  }
  for(let n of ff()){
      if(n>100) break
      console.log(n)
  }
狀態(tài)機(jī)

ES5版本的狀態(tài)機(jī)

 var ticking=true;
    var clock=function () {
        if(ticking){
            console.log("Tick");
        }else{
            console.log("Tock");
        }
        ticking=!ticking
    }
    setInterval(clock,1000)

ES6版本的狀態(tài)機(jī)

  function* Clock () {
        while (true){
            console.log("111")
            yield ;
            console.log("222")
            yield ;
        }
    }
    var cc=Clock();
    setInterval(function () {
        cc.next()
    },1000)
使用Generator函數(shù)實(shí)現(xiàn)異步操作

使用例子:在服務(wù)器端有3個(gè)文件 a.html b.html c.html 現(xiàn)在前端需要讀到這三個(gè)文件的內(nèi)容才可以繼續(xù)執(zhí)行操作。

  $.get("a.json",function (data) {
        console.log(data)
        $.get("b.json",function (data) {
            console .log(data)
            $.get("c.json",function (data) {
                console.log(data)
                //執(zhí)行前端代碼
            })
        })
    })

異步回調(diào)函數(shù)的地域

 function request(url) {
        $.get(url,function (response) {
            it.next(response);
        })
    }
    function* ajaxs () {
        var i=0;
        console.log(++i,yield request("a.json"))
        console.log(++i,yield request("b.json"))
        console.log(++i,yield request("c.json"))
    }
    var it=ajaxs();
     it.next();

使用Generator實(shí)現(xiàn)了異步請(qǐng)求三個(gè)文件 。
使用Generator同步化異步函數(shù)的幾個(gè)步驟
1、將異步代碼的每一步都封裝成一個(gè)普通的函數(shù)
2、定義一個(gè)生成器函數(shù) 把流程寫進(jìn)去
3、定義一個(gè)變量 賦值為遍歷器對(duì)象生成器
4、變量名.next()

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/85189.html

相關(guān)文章

  • ES6學(xué)習(xí)筆記之Generator函數(shù)

    摘要:調(diào)用函數(shù)后和普通函數(shù)不同的是,該函數(shù)并不立即執(zhí)行,也不返回函數(shù)執(zhí)行結(jié)果,而是返回一個(gè)指向內(nèi)部狀態(tài)的對(duì)象,也可以看作是一個(gè)遍歷器對(duì)象。第一個(gè)只是用來啟動(dòng)函數(shù)內(nèi)部的遍歷器,傳參也沒有多大意義。 之前斷斷續(xù)續(xù)接觸到了一些ES6的知識(shí),異步編程方面聽得比較多的就是Promise,直到最近比較系統(tǒng)地學(xué)習(xí)了ES6的新特性才發(fā)現(xiàn)Generator這個(gè)神奇的存在,它可以實(shí)現(xiàn)一些前所未有的事情,讓我頓時(shí)...

    cjie 評(píng)論0 收藏0
  • es6 generator函數(shù)

    摘要:返回的遍歷器對(duì)象可以依次遍歷函數(shù)內(nèi)部的每一個(gè)狀態(tài)。示例內(nèi)部捕獲外部捕獲內(nèi)部捕獲外部捕獲上面代碼遍歷器對(duì)象連續(xù)拋出兩個(gè)錯(cuò)誤,第一個(gè)被函數(shù)體內(nèi)的捕獲。上面代碼中,首先執(zhí)行函數(shù),獲取遍歷器對(duì)象,然后使用方法第二行,執(zhí)行異步任務(wù)的第一階段。 參考 來源《ecmascript6 入門》generator部分 認(rèn)識(shí)generator函數(shù) 形式上,generator函數(shù)有兩個(gè)特點(diǎn):一是functio...

    voidking 評(píng)論0 收藏0
  • js 中的Generator 函數(shù)

    摘要:函數(shù)返回的遍歷器對(duì)象,還有一個(gè)方法,可以返回給定的值,并且終結(jié)遍歷函數(shù)。這被稱為表達(dá)式個(gè)人理解主要用作遍歷具有遍歷器接口的對(duì)象或函數(shù)。完整形式函數(shù)的函數(shù)總是返回一個(gè)遍歷器,規(guī)定這個(gè)遍歷器是函數(shù)的實(shí)例,也繼承了函數(shù)的對(duì)象上的方法。 語法上 首先可以把它理解成,Generator 函數(shù)是一個(gè)狀態(tài)機(jī),封裝了多個(gè)內(nèi)部狀態(tài)。執(zhí)行 Generator 函數(shù)會(huì)返回一個(gè)遍歷器對(duì)象,也就是說,Gener...

    Ku_Andrew 評(píng)論0 收藏0
  • 深入理解 Generator 函數(shù)

    摘要:同時(shí),迭代器有一個(gè)方法來向函數(shù)中暫停處拋出一個(gè)錯(cuò)誤,該錯(cuò)誤依然可以通過函數(shù)內(nèi)部的模塊進(jìn)行捕獲處理。 本文翻譯自:Diving Deeper With ES6 Generators 由于個(gè)人能力有限,翻譯中難免有紕漏和錯(cuò)誤,望不吝指正issue ES6 Generators:完整系列 The Basics Of ES6 Generators Diving Deeper With E...

    jzzlee 評(píng)論0 收藏0
  • Node v4 - Generator函數(shù)

    摘要:返回的遍歷器對(duì)象,可以依次遍歷函數(shù)內(nèi)部的每一個(gè)狀態(tài)。方法調(diào)用遍歷器對(duì)象的方法,使得指針移向下一個(gè)狀態(tài)。運(yùn)行結(jié)果就是使用一個(gè)遍歷器,遍歷了多個(gè)函數(shù),有遞歸的效果。 1、Generator簡介 基本概念 Generator函數(shù)有多種理解角度。從語法上,首先可以把它理解成,Generator函數(shù)是一個(gè)狀態(tài)機(jī),封裝了多個(gè)內(nèi)部狀態(tài)。 執(zhí)行Generator函數(shù)會(huì)返回一個(gè)遍歷器對(duì)象,也就是說,Ge...

    cnTomato 評(píng)論0 收藏0
  • 通過ES6 Generator函數(shù)實(shí)現(xiàn)異步流程

    摘要:換句話說,我們很好的對(duì)代碼的功能關(guān)注點(diǎn)進(jìn)行了分離通過將使用消費(fèi)值得地方函數(shù)中的邏輯和通過異步流程來獲取值迭代器的方法進(jìn)行了有效的分離。但是現(xiàn)在我們通過來管理代碼的異步流程部分,我們解決了回調(diào)函數(shù)所帶來的反轉(zhuǎn)控制等問題。 本文翻譯自 Going Async With ES6 Generators 由于個(gè)人能力知識(shí)有限,翻譯過程中難免有紕漏和錯(cuò)誤,還望指正Issue ES6 Gener...

    劉厚水 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<