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

資訊專(zhuān)欄INFORMATION COLUMN

async 更優(yōu)雅異步體驗(yàn)

Ajian / 950人閱讀

摘要:文章同步自個(gè)人博客上一篇讓自啟動(dòng)介紹了通過(guò)起動(dòng)器讓跑起來(lái),而本篇采用實(shí)現(xiàn)更優(yōu)雅的異步編程。而采用寫(xiě),代碼則是直接運(yùn)行即可直接運(yùn)行了,無(wú)須寫(xiě)生成器來(lái)運(yùn)行了,而代碼僅僅是改為改為而已。不過(guò)效果確實(shí)非常好,讓異步編程更加的同步了。

文章同步自個(gè)人博客:http://www.52cik.com/2016/07/11/generator-co.html

上一篇《讓 Generator 自啟動(dòng)》介紹了通過(guò)起動(dòng)器讓 Generator 跑起來(lái),而本篇采用 async 實(shí)現(xiàn)更優(yōu)雅的異步編程。

從例子開(kāi)始

借用上一篇例子中的例子說(shuō)起。

function* gen() {
  var r1 = yield $.get("url1");
  var r2 = yield $.get("url2");
  var r3 = yield $.get("url3");

  console.log(r1, r2, r3);
}

然后,我們需要寫(xiě)一個(gè)啟動(dòng)器來(lái)啟動(dòng)這個(gè)函數(shù)。
而采用 async 寫(xiě),代碼則是:

async function gen() {
  var r1 = await $.get("url1");
  var r2 = await $.get("url2");
  var r3 = await $.get("url3");

  console.log([r1, r2, r3].join("
"));
}

gen(); // 直接運(yùn)行即可

直接運(yùn)行了,無(wú)須寫(xiě)生成器來(lái)運(yùn)行了,而代碼僅僅是 * 改為 async, yield 改為 await 而已。
所以本質(zhì)上講:async 就是 Generator 的語(yǔ)法糖。

多任務(wù)處理

多任務(wù)處理有個(gè)坑,就是不能直接在 forEach, map 之類(lèi)的方法里處理,否則會(huì)報(bào)錯(cuò)或者得到錯(cuò)誤的結(jié)果。

function sleep(t) {
  return new Promise(resolve => setTimeout( _ => { resolve(+new Date) }, t))
}

async function run() {
  // 順序
  let a = await sleep(100)
  let b = await sleep(200)

  // 并發(fā)1
  let c = await Promise.all([sleep(100), sleep(200), sleep(300)])

  // 并發(fā)2
  let d = await Promise.all([100, 200, 300].map(t => sleep(t)))

  // 并發(fā)3
  let list = [sleep(100), sleep(200), sleep(300)]
  let e = []
  for (let fn of list) {
    e.push(await fn)
  }

  console.log(
    "",
    "a:", a, "
",
    "b:", b, "
",
    "c:", c, "
",
    "d:", d, "
",
    "e:", e, "
"
  )
}

run()

// a: 1468317737179 
// b: 1468317737384 
// c: [ 1468317737485, 1468317737589, 1468317737688 ] 
// d: [ 1468317737792, 1468317737890, 1468317737989 ] 
// e: [ 1468317738094, 1468317738193, 1468317738293 ] 
小結(jié)

async 沒(méi)多大的變動(dòng),歸根結(jié)底就是個(gè)語(yǔ)法糖,幫助我們運(yùn)行生成器,而不需要我們自己寫(xiě)起動(dòng)器了。
不過(guò)效果確實(shí)非常好,讓異步編程更加的同步了。

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

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

相關(guān)文章

  • JavaScript:體驗(yàn)異步優(yōu)雅解決方案

    摘要:但是的的出現(xiàn)碉堡的新朋友,我們可以輕松寫(xiě)出同步風(fēng)格的代碼同時(shí)又擁有異步機(jī)制,可以說(shuō)是目前最簡(jiǎn)單,最優(yōu)雅,最佳的解決方案了。不敢說(shuō)這一定是終極的解決方案,但確實(shí)是目前最優(yōu)雅的解決方案 一、異步解決方案的進(jìn)化史 JavaScript的異步操作一直是個(gè)麻煩事,所以不斷有人提出它的各種解決方案。可以追溯到最早的回調(diào)函數(shù)(ajax老朋友),到Promise(不算新的朋友),再到ES6的Gener...

    happyfish 評(píng)論0 收藏0
  • JavaScript 中優(yōu)雅的實(shí)現(xiàn)順序執(zhí)行異步函數(shù)

    摘要:順序執(zhí)行異步函數(shù)異步為帶來(lái)非阻塞等優(yōu)勢(shì)的同時(shí),同時(shí)也在一些場(chǎng)景下帶了不便,如順序執(zhí)行異步函數(shù),下面總結(jié)了一些常用的方法。 火于異步 1995年,當(dāng)時(shí)最流行的瀏覽器——網(wǎng)景中開(kāi)始運(yùn)行 JavaScript (最初稱(chēng)為 LiveScript)。 1996年,微軟發(fā)布了 JScript 兼容 JavaScript。隨著網(wǎng)景、微軟競(jìng)爭(zhēng)而不斷的技術(shù)更新,在 2000年前后,JavaScript ...

    monw3c 評(píng)論0 收藏0
  • ES6-7

    摘要:的翻譯文檔由的維護(hù)很多人說(shuō),阮老師已經(jīng)有一本關(guān)于的書(shū)了入門(mén),覺(jué)得看看這本書(shū)就足夠了。前端的異步解決方案之和異步編程模式在前端開(kāi)發(fā)過(guò)程中,顯得越來(lái)越重要。為了讓編程更美好,我們就需要引入來(lái)降低異步編程的復(fù)雜性。 JavaScript Promise 迷你書(shū)(中文版) 超詳細(xì)介紹promise的gitbook,看完再不會(huì)promise...... 本書(shū)的目的是以目前還在制定中的ECMASc...

    mudiyouyou 評(píng)論0 收藏0
  • JavaScript 異步

    摘要:從最開(kāi)始的到封裝后的都在試圖解決異步編程過(guò)程中的問(wèn)題。為了讓編程更美好,我們就需要引入來(lái)降低異步編程的復(fù)雜性。寫(xiě)一個(gè)符合規(guī)范并可配合使用的寫(xiě)一個(gè)符合規(guī)范并可配合使用的理解的工作原理采用回調(diào)函數(shù)來(lái)處理異步編程。 JavaScript怎么使用循環(huán)代替(異步)遞歸 問(wèn)題描述 在開(kāi)發(fā)過(guò)程中,遇到一個(gè)需求:在系統(tǒng)初始化時(shí)通過(guò)http獲取一個(gè)第三方服務(wù)器端的列表,第三方服務(wù)器提供了一個(gè)接口,可通過(guò)...

    tuniutech 評(píng)論0 收藏0
  • js 處理異步操作的幾種方式

    摘要:如果我們只有一個(gè)異步操作,用回調(diào)函數(shù)來(lái)處理是完全沒(méi)有任何問(wèn)題的。事件監(jiān)聽(tīng)使用事件監(jiān)聽(tīng)的方式番禺廣州上述代碼需要實(shí)現(xiàn)一個(gè)事件監(jiān)聽(tīng)器。只處理對(duì)象廣州番禺函數(shù)將函數(shù)的自動(dòng)執(zhí)行器,改在語(yǔ)言層面提供,不暴露給用戶(hù)。 概論 由于 JavaScript 是一門(mén)單線(xiàn)程執(zhí)行的語(yǔ)言,所以在我們處理耗時(shí)較長(zhǎng)的任務(wù)時(shí),異步編程就顯得尤為重要。js 處理異步操作最傳統(tǒng)的方式是回調(diào)函數(shù),基本上所有的異步操作都可以...

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

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

0條評(píng)論

閱讀需要支付1元查看
<