国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專(zhuān)欄INFORMATION COLUMN

用各種方式實(shí)現(xiàn)同步for循環(huán)輸出(yeild, await...)

JayChen / 2468人閱讀

摘要:前段的功能越來(lái)越強(qiáng)大,現(xiàn)在實(shí)現(xiàn)同步的循環(huán)輸出的方式也越來(lái)越多,我們先看一個(gè)例子后輸出相信大家對(duì)這個(gè)比較常見(jiàn)了,原理是因?yàn)槁暶鞯臑榈木植孔兞浚皇嵌〞r(shí)器,他暫時(shí)將內(nèi)部函數(shù)掛起,等到一秒后執(zhí)行,到那個(gè)時(shí)候,已經(jīng)變成了。后續(xù)會(huì)更新,歡迎補(bǔ)充

前段的功能越來(lái)越強(qiáng)大,現(xiàn)在實(shí)現(xiàn)同步的for循環(huán)輸出的方式也越來(lái)越多,我們先看一個(gè)例子:

forF();
function forF() {
  for (var i = 0; i < 3; i++) {
    setTimeout(function () {
      console.log(i);
    }, 1000)
  }
}
// 1s后輸出:3 3 3

相信大家對(duì)這個(gè)比較常見(jiàn)了,原理是因?yàn)関ar聲明的i為forF的局部變量,setTimeout只是定時(shí)器,他暫時(shí)將內(nèi)部函數(shù)掛起,等到一秒后執(zhí)行,到那個(gè)時(shí)候,i已經(jīng)變成了5。

那么我們的解決辦法有哪些呢?

先上一個(gè)es5以前的解決辦法:

forF();
function forF() {
  for (var i = 0; i < 3; i++) {
    outF(i);
  }
}

function outF(i) {
  setTimeout(function () {
    console.log(i);
  }, 1000*i)
}
// 0 1 2

因?yàn)樵谘h(huán)中用了外部函數(shù),那么相當(dāng)于創(chuàng)建了三個(gè)outF實(shí)例,因?yàn)閕是基本變量,所以每個(gè)實(shí)例的i都是不共享的,這里要注意設(shè)置的定時(shí)器時(shí)間要1000*i;

下面開(kāi)始用es6的方法實(shí)現(xiàn)啦!
1.用塊作用域的let

forF();
function forF() {
  for (let i = 0; i < 3; i++) {
    setTimeout(function () {
      console.log(i);
    }, 1000*i)
  }
}

因?yàn)閘et是塊作用域的,對(duì)于setTimeout函數(shù)而言,每次循環(huán)都新創(chuàng)建一個(gè)i,每個(gè)i不共享

2.await(其實(shí)是es7的)
見(jiàn)代碼

var sleep = function (time) {
    return new Promise(function (resolve, reject) {
        setTimeout(function () {
            resolve("ok");
        }, time);
    })
};
// // 用await實(shí)現(xiàn)循環(huán)輸出數(shù)字
async function awaitF() {
  for (var i = 0; i < 3; i++) {
    await sleep(1000);
    console.log(i)
  }
}
awaitF()
// 0 1 2

await顧名思義是等待,他接受一個(gè)promise對(duì)象,等待他相應(yīng)然后才繼續(xù)執(zhí)行。
注意用await的函數(shù)必須加async關(guān)鍵字
關(guān)于promise,推薦看大白話:https://www.cnblogs.com/lvdab...

3.yeild

function* countAppleSales () {
  for (var i = 0; i < 3; i++) {
    yield;
    console.log(i);
  }
}

var appleStore = countAppleSales(); // Generator { }
appleStore.next();
nextApp(appleStore);
function nextApp(appleStore) {
  setTimeout(function () {
    let done = appleStore.next().done;
    if (!done) {
      nextApp(appleStore);
    }
  }, 1000);
}

yield函數(shù)必須定義成function* 外部在調(diào)用此函數(shù)的時(shí)候必須用next()方法他才會(huì)繼續(xù)執(zhí)行到下個(gè)yeild那里,所以這里用遞歸去執(zhí)行。
關(guān)于yeild的知識(shí)點(diǎn)百度也很多,可自行百度。

后續(xù)會(huì)更新,歡迎補(bǔ)充

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

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

相關(guān)文章

  • 理解Koa洋蔥模型

    摘要:的嵌套就像是洋蔥模型的形狀就是一層包裹著一層,直到到最里面一層的的值返回。中間件引擎是有模塊來(lái)實(shí)現(xiàn)的,也就是實(shí)現(xiàn)洋蔥模型的核心引擎。表示遍歷還沒(méi)有結(jié)束。 中間件特性 | | | ...

    yearsj 評(píng)論0 收藏0
  • 異步等待的 Python 協(xié)程

    摘要:輔之以事件循環(huán),協(xié)程可用于異步處理,尤其是在中。當(dāng)前支持的協(xié)程基于增強(qiáng)型生成器,于版本開(kāi)始采用。新的特性中,異步還有兩種新用途異步內(nèi)容管理器和迭代器。 現(xiàn)在 Python 已經(jīng)支持用協(xié)程進(jìn)行異步處理。但最近有建議稱(chēng)添加協(xié)程以全面完善 Python 的語(yǔ)言結(jié)構(gòu),而不是像現(xiàn)在這樣把他們作為生成器的一個(gè)類(lèi)型。此外,兩個(gè)新的關(guān)鍵字———異步(async)和等待(await),都該添加到 Pyt...

    NicolasHe 評(píng)論0 收藏0
  • 【JS基礎(chǔ)】ES6語(yǔ)法

    摘要:遍歷器對(duì)象調(diào)用方法后,拋出的異常被函數(shù)體捕獲以后,會(huì)附帶執(zhí)行下一條語(yǔ)句。 iterator迭代器 在ES6之前遍歷數(shù)組的方法有以下四種: // 第一種 for(var i = 0; i < array.length; i++){ console.log(array[i]) } // 第二種 array.forEach(function(item,index){ cons...

    Maxiye 評(píng)論0 收藏0
  • 通讀Python官方文檔之協(xié)程、Future與Task

    摘要:所以在第一遍閱讀官方文檔的時(shí)候,感覺(jué)完全是在夢(mèng)游。通過(guò)或者等待另一個(gè)協(xié)程的結(jié)果或者異常,異常會(huì)被傳播。接口返回的結(jié)果指示已結(jié)束,并賦值。取消與取消不同。調(diào)用將會(huì)向被包裝的協(xié)程拋出。任務(wù)相關(guān)函數(shù)安排協(xié)程的執(zhí)行。負(fù)責(zé)切換線程保存恢復(fù)。 Tasks and coroutines 翻譯的python官方文檔 這個(gè)問(wèn)題的惡心之處在于,如果你要理解coroutine,你應(yīng)該理解future和tas...

    mgckid 評(píng)論0 收藏0
  • Javascript關(guān)于異步編程的發(fā)展

    摘要:前言轉(zhuǎn)簡(jiǎn)體重新排版布局代碼全面使用并且直接附上輸出結(jié)果補(bǔ)充細(xì)節(jié)補(bǔ)充內(nèi)容增加例子說(shuō)明新增和在遍歷情況下怎么使用上文講了關(guān)于執(zhí)行機(jī)制單線程同異步任務(wù)事件循環(huán)的知識(shí)點(diǎn)我們知道在某一時(shí)刻內(nèi)只能執(zhí)行特定的一個(gè)任務(wù)并且會(huì)阻塞其它任務(wù)執(zhí)行為了解決這個(gè) 前言 PS:2018/08/08 轉(zhuǎn)簡(jiǎn)體2018/08/09 重新排版布局,代碼全面使用ES6并且直接附上輸出結(jié)果,補(bǔ)充細(xì)節(jié)2018/08/13 補(bǔ)充...

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

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

0條評(píng)論

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