成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

【譯文】Node.js v7 Nightly版本的async/await小實(shí)踐

Little_XM / 3600人閱讀

摘要:正文的實(shí)踐幾個(gè)月前,引擎加入了特性。注意目前特性只在非穩(wěn)定版本的中才有。暫時(shí)建議不要用于生產(chǎn)環(huán)境。意思是它能以非阻塞的方式暫定代碼的執(zhí)行,以等待上一個(gè)結(jié)果返回。在此之前,還它只能通過(guò)轉(zhuǎn)譯器來(lái)實(shí)現(xiàn)。

來(lái)自新手向國(guó)外技術(shù)博客RisingStack的又一篇Node.js相關(guān)技術(shù)文章,原文請(qǐng)看此。

正文 Node.js v7的async/await實(shí)踐

幾個(gè)月前,JavaScript引擎V8加入了async/await特性。Node.js也隨之更新它的V8版本,最新的Nightly版本終于加入了async/await特性的V8引擎。

注意:目前async/await特性只在非穩(wěn)定版本的Nightly中才有。暫時(shí)建議不要用于生產(chǎn)環(huán)境。

什么是async/await?

首先,我們來(lái)看看如何用Promise來(lái)做異步編程。下面的小例子展示了如何通過(guò)FetchAPI和Promise獲取數(shù)據(jù):

function getTrace () {  
  return fetch("https://trace.risingstack.com", {
    method: "get"
  })
}

getTrace()  
  .then()
  .catch()

通過(guò)使用async/await,可在Promise中實(shí)現(xiàn)await功能。意思是它能以非阻塞的方式暫定代碼的執(zhí)行,以等待上一個(gè)結(jié)果返回。如果這個(gè)promise最終的狀態(tài)不是resolved而是rejected,它會(huì)將rejected的值拋出異常,可以用try/catch塊捕獲。

如果把上面的例子用async/await實(shí)現(xiàn),會(huì)是下面這樣:

async function getTrace () {  
  let pageContent
  try {
    pageContent = await fetch("https://trace.risingstack.com", {
      method: "get"
    })
  } catch (ex) {
    console.error(ex)
  }

  return pageContent
}

getTrace()  
  .then()

要了解更多關(guān)于async/await的信息,推薦下面兩篇文章:

https://ponyfoo.com/articles/...

https://tc39.github.io/ecmasc...

在不使用轉(zhuǎn)譯器的情況下,使用async/await
1. 安裝Node.js v7

首先,要獲取最新的Nightly builds。

如果你使用nvm的話(huà),可以使用下面的方式安裝:

NVM_NODEJS_ORG_MIRROR=https://nodejs.org/download/nightly  
nvm install 7  
nvm use 7  
2. 用async/await運(yùn)行個(gè)文件試試

先來(lái)創(chuàng)建一個(gè)簡(jiǎn)單的JavaScript文件,用setTimeout實(shí)現(xiàn)一個(gè)函數(shù)的延遲執(zhí)行,并且用async/await來(lái)調(diào)用。

// app.js
const timeout = function (delay) {  
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      resolve()
    }, delay)
  })
}

async function timer () {  
  console.log("timer started")
  await Promise.resolve(timeout(100));
  console.log("timer finished")
}

timer()  

文件創(chuàng)建好之后,試下運(yùn)行它:

node app.js 

不過(guò)這樣是不行的,因?yàn)閍sync/await目前還需要特殊的方式執(zhí)行,如下所示:

node --harmony-async-await app.js  
3. 用async/await創(chuàng)建web服務(wù)器

以Koa v2為例,Koa現(xiàn)在支持中間件形式的異步函數(shù)。在此之前,還它只能通過(guò)轉(zhuǎn)譯器來(lái)實(shí)現(xiàn)。

你可以以中間件形式簡(jiǎn)單地傳入一個(gè)異步函數(shù):

// app.js
const Koa = require("koa")  
const app = new Koa()

app.use(async (ctx, next) => {  
  const start = new Date()
  await next()
  const ms = new Date() - start
  console.log(`${ctx.method} ${ctx.url} - ${ms}ms`)
})

app.use(ctx => {  
  ctx.body = "Hello Koa"
})

app.listen(3000) 

像這樣,就用Koa創(chuàng)建了一個(gè)服務(wù)器,接下來(lái)運(yùn)行它:

node --harmony-async-await app.js
何時(shí)可以開(kāi)始使用async/await

Node.js v8,下一個(gè)穩(wěn)定版本,且會(huì)支持async/await功能將于2017年4月發(fā)行。在那之前,你都可以在Node.js v7版本上試驗(yàn)?zāi)愕拇a~

THE END

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

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

相關(guān)文章

  • 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
  • Async/Await替代Promise6個(gè)理由

    摘要:是基于實(shí)現(xiàn)的,它不能用于普通的回調(diào)函數(shù)。憂(yōu)慮對(duì)于,也許你有一些合理的懷疑它使得異步代碼不再明顯我們已經(jīng)習(xí)慣了用回調(diào)函數(shù)或者來(lái)識(shí)別異步代碼,我們可能需要花數(shù)個(gè)星期去習(xí)慣新的標(biāo)志。 譯者按: Node.js的異步編程方式有效提高了應(yīng)用性能;然而回調(diào)地獄卻讓人望而生畏,Promise讓我們告別回調(diào)函數(shù),寫(xiě)出更優(yōu)雅的異步代碼;在實(shí)踐過(guò)程中,卻發(fā)現(xiàn)Promise并不完美;技術(shù)進(jìn)步是無(wú)止境的,這時(shí)...

    tuomao 評(píng)論0 收藏0
  • 【從前端到全?!? koa快速入門(mén)指南

    摘要:前言隨著技術(shù)的不斷發(fā)展,前端工程師也被賦予了越來(lái)越多的職責(zé)。接下來(lái)這篇文章,完成一個(gè)簡(jiǎn)單的登錄注冊(cè),能讓你快速上手,成為一個(gè)小全棧工程師,快速開(kāi)始安裝因?yàn)橐呀?jīng)完全支持語(yǔ)法,所以請(qǐng)保證的版本在以上推薦一個(gè)的多版本管理工具。 前言 隨著技術(shù)的不斷發(fā)展,前端工程師也被賦予了越來(lái)越多的職責(zé)。不再是從前只需要切個(gè)圖,加個(gè)css樣式就能完成任務(wù)的切圖仔了。接下來(lái)這篇文章,完成一個(gè)簡(jiǎn)單的登錄注冊(cè),能...

    鄒強(qiáng) 評(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
  • 【全文】狼叔:如何正確學(xué)習(xí)Node.js

    摘要:感謝大神的免費(fèi)的計(jì)算機(jī)編程類(lèi)中文書(shū)籍收錄并推薦地址,以后在倉(cāng)庫(kù)里更新地址,聲音版全文狼叔如何正確的學(xué)習(xí)簡(jiǎn)介現(xiàn)在,越來(lái)越多的科技公司和開(kāi)發(fā)者開(kāi)始使用開(kāi)發(fā)各種應(yīng)用。 說(shuō)明 2017-12-14 我發(fā)了一篇文章《沒(méi)用過(guò)Node.js,就別瞎逼逼》是因?yàn)橛腥嗽谥跎虾贜ode.js。那篇文章的反響還是相當(dāng)不錯(cuò)的,甚至連著名的hax賀老都很認(rèn)同,下班時(shí)讀那篇文章,竟然坐車(chē)的還坐過(guò)站了。大家可以很...

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

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

0條評(píng)論

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