摘要:正文的實踐幾個月前,引擎加入了特性。注意目前特性只在非穩(wěn)定版本的中才有。暫時建議不要用于生產(chǎn)環(huán)境。意思是它能以非阻塞的方式暫定代碼的執(zhí)行,以等待上一個結果返回。在此之前,還它只能通過轉譯器來實現(xiàn)。
來自新手向國外技術博客RisingStack的又一篇Node.js相關技術文章,原文請看此。
正文 Node.js v7的async/await實踐幾個月前,JavaScript引擎V8加入了async/await特性。Node.js也隨之更新它的V8版本,最新的Nightly版本終于加入了async/await特性的V8引擎。
什么是async/await?注意:目前async/await特性只在非穩(wěn)定版本的Nightly中才有。暫時建議不要用于生產(chǎn)環(huán)境。
首先,我們來看看如何用Promise來做異步編程。下面的小例子展示了如何通過FetchAPI和Promise獲取數(shù)據(jù):
function getTrace () { return fetch("https://trace.risingstack.com", { method: "get" }) } getTrace() .then() .catch()
通過使用async/await,可在Promise中實現(xiàn)await功能。意思是它能以非阻塞的方式暫定代碼的執(zhí)行,以等待上一個結果返回。如果這個promise最終的狀態(tài)不是resolved而是rejected,它會將rejected的值拋出異常,可以用try/catch塊捕獲。
如果把上面的例子用async/await實現(xiàn),會是下面這樣:
async function getTrace () { let pageContent try { pageContent = await fetch("https://trace.risingstack.com", { method: "get" }) } catch (ex) { console.error(ex) } return pageContent } getTrace() .then()
要了解更多關于async/await的信息,推薦下面兩篇文章:
https://ponyfoo.com/articles/...
https://tc39.github.io/ecmasc...
在不使用轉譯器的情況下,使用async/await首先,要獲取最新的Nightly builds。
如果你使用nvm的話,可以使用下面的方式安裝:
NVM_NODEJS_ORG_MIRROR=https://nodejs.org/download/nightly nvm install 7 nvm use 7
先來創(chuàng)建一個簡單的JavaScript文件,用setTimeout實現(xiàn)一個函數(shù)的延遲執(zhí)行,并且用async/await來調(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)建好之后,試下運行它:
node app.js
不過這樣是不行的,因為async/await目前還需要特殊的方式執(zhí)行,如下所示:
node --harmony-async-await app.js
以Koa v2為例,Koa現(xiàn)在支持中間件形式的異步函數(shù)。在此之前,還它只能通過轉譯器來實現(xiàn)。
你可以以中間件形式簡單地傳入一個異步函數(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)建了一個服務器,接下來運行它:
node --harmony-async-await app.js何時可以開始使用async/await
Node.js v8,下一個穩(wěn)定版本,且會支持async/await功能將于2017年4月發(fā)行。在那之前,你都可以在Node.js v7版本上試驗你的代碼~
THE END文章版權歸作者所有,未經(jīng)允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/86503.html
摘要:從最開始的到封裝后的都在試圖解決異步編程過程中的問題。為了讓編程更美好,我們就需要引入來降低異步編程的復雜性。寫一個符合規(guī)范并可配合使用的寫一個符合規(guī)范并可配合使用的理解的工作原理采用回調(diào)函數(shù)來處理異步編程。 JavaScript怎么使用循環(huán)代替(異步)遞歸 問題描述 在開發(fā)過程中,遇到一個需求:在系統(tǒng)初始化時通過http獲取一個第三方服務器端的列表,第三方服務器提供了一個接口,可通過...
摘要:是基于實現(xiàn)的,它不能用于普通的回調(diào)函數(shù)。憂慮對于,也許你有一些合理的懷疑它使得異步代碼不再明顯我們已經(jīng)習慣了用回調(diào)函數(shù)或者來識別異步代碼,我們可能需要花數(shù)個星期去習慣新的標志。 譯者按: Node.js的異步編程方式有效提高了應用性能;然而回調(diào)地獄卻讓人望而生畏,Promise讓我們告別回調(diào)函數(shù),寫出更優(yōu)雅的異步代碼;在實踐過程中,卻發(fā)現(xiàn)Promise并不完美;技術進步是無止境的,這時...
摘要:前言隨著技術的不斷發(fā)展,前端工程師也被賦予了越來越多的職責。接下來這篇文章,完成一個簡單的登錄注冊,能讓你快速上手,成為一個小全棧工程師,快速開始安裝因為已經(jīng)完全支持語法,所以請保證的版本在以上推薦一個的多版本管理工具。 前言 隨著技術的不斷發(fā)展,前端工程師也被賦予了越來越多的職責。不再是從前只需要切個圖,加個css樣式就能完成任務的切圖仔了。接下來這篇文章,完成一個簡單的登錄注冊,能...
摘要:的翻譯文檔由的維護很多人說,阮老師已經(jīng)有一本關于的書了入門,覺得看看這本書就足夠了。前端的異步解決方案之和異步編程模式在前端開發(fā)過程中,顯得越來越重要。為了讓編程更美好,我們就需要引入來降低異步編程的復雜性。 JavaScript Promise 迷你書(中文版) 超詳細介紹promise的gitbook,看完再不會promise...... 本書的目的是以目前還在制定中的ECMASc...
摘要:感謝大神的免費的計算機編程類中文書籍收錄并推薦地址,以后在倉庫里更新地址,聲音版全文狼叔如何正確的學習簡介現(xiàn)在,越來越多的科技公司和開發(fā)者開始使用開發(fā)各種應用。 說明 2017-12-14 我發(fā)了一篇文章《沒用過Node.js,就別瞎逼逼》是因為有人在知乎上黑Node.js。那篇文章的反響還是相當不錯的,甚至連著名的hax賀老都很認同,下班時讀那篇文章,竟然坐車的還坐過站了。大家可以很...
閱讀 1628·2021-10-12 10:11
閱讀 3746·2021-09-03 10:35
閱讀 1438·2019-08-30 15:55
閱讀 2122·2019-08-30 15:54
閱讀 991·2019-08-30 13:07
閱讀 1003·2019-08-30 11:09
閱讀 568·2019-08-29 13:21
閱讀 2644·2019-08-29 11:32