亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

javascript 迭代器案例逐步認(rèn)識(shí)

Soarkey / 1845人閱讀

摘要:一認(rèn)識(shí)什么是傳遞參數(shù)注意這里打印函數(shù)睡眠函數(shù)改進(jìn)版本,實(shí)現(xiàn)自執(zhí)行迭代器自執(zhí)行函數(shù)依次執(zhí)行,,異步自執(zhí)行可以借助上面函數(shù)執(zhí)行,這里就直接執(zhí)行依次執(zhí)行結(jié)果是終極解決放啊在,我們一般使用大神的庫(kù)來(lái)解決這個(gè)函數(shù)調(diào)用的問(wèn)題可以參考我的博文章內(nèi)容

es6 generate 是什么東西?

迭代器 : 是一種協(xié)議,每一次迭代的值都跟上一次迭代的不一樣,總會(huì)有一個(gè)next 總能拿到一個(gè)對(duì)象
生成器:生成一個(gè)可以返回迭代器的函數(shù),本質(zhì)上還是操作迭代器,更加方便的使用迭代器,每次返回的都是promise

一: 認(rèn)識(shí)什么是generate

function* gen(){
  yield 1
  yield* add()
  yield x   // 傳遞參數(shù)
  return 4

}

function* add(){
   yield 11
   yield 12
}

const g = gen()
log( g.next() )  // {done:false,value;1}
log( g.next() )  // {done:false,value;11}
log( g.next() ) // {done:false,value;12}
log( g.next(3) ) // {done:false,value;3}  // 注意這里
log( g.next() ) // {done:false,value;4}
log( g.next() ) // {done:true,value;undefined}

2:

// log 打印函數(shù)
const log = s => console.log.call(this,s)
// sleep 睡眠函數(shù)
const sleep = (cb,t) => setTimeout( cb.bind(this) ,t)

function* request(resume){
  yield  sleep( ()=>{ console.log(1)} ,1000)
  yield  sleep( ()=>{ console.log(2)} ,2000)
  yield  sleep( ()=>{ console.log(3)} ,3000)
}

var g = request()
g.next() //  1
g.next() //  2
g.next() //  3

3: 改進(jìn)版本,實(shí)現(xiàn)自執(zhí)行

// 迭代器自執(zhí)行函數(shù)
function run(generatorFunction) {
   var generatorItr = generatorFunction(resume)
   function resume(callbackValue) {
      generatorItr.next(callbackValue);
   }
   generatorItr.next()
}

function* request(resume){
  let a = yield  sleep( ()=>{

    console.log(1)
    resume()

  } ,1000)


  yield  sleep( ()=>{
     console.log(2)
     resume()
  } ,2000)

  yield  sleep( ()=>{ console.log(3) } ,3000)
}

run(request)  // 依次執(zhí)行 1,2,3

4: ajax 異步自執(zhí)行

const urls = ["url1","url2","url3"]
const req = (cb,url) => setTimeout( cb.bind(this,url) ,1000)


function* request(arr){
   for(let i=0; i{
      req((u)=>{
         if(u){
            resolve(u)
         }else{
            reject(u)
         }
      },url)
  })

  p.then((r)=>{
     g.next()
  })
}


// 可以借助上面run函數(shù)執(zhí)行,這里就直接執(zhí)行
var g = request(urls)
g.next()  // 依次執(zhí)行結(jié)果是: url1  url2  url3

5: 終極解決放啊 在node,我們一般使用 TJ 大神的 co庫(kù)來(lái)解決這個(gè)run 函數(shù)調(diào)用的問(wèn)題:

co(function* (){
  var result = yield Promise.resolve(true)
  return result
}) .then((v)=>{
  log(v)
})

可以參考我的博文章內(nèi)容

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/108511.html

相關(guān)文章

  • JavaScript 模式》知識(shí)點(diǎn)小抄本(上)

    摘要:?jiǎn)误w模式有以下優(yōu)點(diǎn)用來(lái)劃分命名空間,減少全局變量數(shù)量。通常我們使用操作符創(chuàng)建單體模式的三種選擇,讓構(gòu)造函數(shù)總返回最初的對(duì)象使用全局對(duì)象來(lái)存儲(chǔ)該實(shí)例不推薦,容易全局污染。實(shí)現(xiàn)該工廠模式并不困難,主要是要找到能夠穿件所需類型對(duì)象的構(gòu)造函數(shù)。 介紹 最近開(kāi)始給自己每周訂個(gè)學(xué)習(xí)任務(wù),學(xué)習(xí)結(jié)果反饋為一篇文章的輸出,做好學(xué)習(xí)記錄。 這一周(02.25-03.03)我定的目標(biāo)是《JavaScri...

    didikee 評(píng)論0 收藏0
  • 從觀察者模式到迭代模式系統(tǒng)講解 RxJS Observable(一)

    摘要:是的縮寫(xiě),起源于,是一個(gè)基于可觀測(cè)數(shù)據(jù)流結(jié)合觀察者模式和迭代器模式的一種異步編程的應(yīng)用庫(kù)。是基于觀察者模式和迭代器模式以函數(shù)式編程思維來(lái)實(shí)現(xiàn)的。學(xué)習(xí)之前我們需要先了解觀察者模式和迭代器模式,還要對(duì)流的概念有所認(rèn)識(shí)。 RxJS 是 Reactive Extensions for JavaScript 的縮寫(xiě),起源于 Reactive Extensions,是一個(gè)基于可觀測(cè)數(shù)據(jù)流 Stre...

    notebin 評(píng)論0 收藏0
  • 【連載】前端個(gè)人文章整理-從基礎(chǔ)到入門(mén)

    摘要:個(gè)人前端文章整理從最開(kāi)始萌生寫(xiě)文章的想法,到著手開(kāi)始寫(xiě),再到現(xiàn)在已經(jīng)一年的時(shí)間了,由于工作比較忙,更新緩慢,后面還是會(huì)繼更新,現(xiàn)將已經(jīng)寫(xiě)好的文章整理一個(gè)目錄,方便更多的小伙伴去學(xué)習(xí)。 showImg(https://segmentfault.com/img/remote/1460000017490740?w=1920&h=1080); 個(gè)人前端文章整理 從最開(kāi)始萌生寫(xiě)文章的想法,到著手...

    madthumb 評(píng)論0 收藏0

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

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<