Node.js 7.0安裝體驗和示例代碼解讀

Node.js 7.0安裝體驗和示例代碼解讀

菜神 @fundon 大晚上不睡覺,放毒:https://github.com/pauliusuza/node-v7-async-await-demo?utm_content=buffer9bce9&utm_medium=social&utm_source=twitter.com&utm_campaign=buffer 稍加整理,以便閱讀node

安裝Node.js v7

很早以前https://nodejs.org/download/test就放出了構建好的測試版本的,咱們可使用nvm來安裝。若是你們不熟悉nvm,能夠參靠比較經典的Node.js的3m安裝法git

第一步配置環境變量,指定nvm使用的v7 mirror,這是由於默認的nvm mirror指向的是https://nodejs.org/dist/,因此默認nvm ls-remote是查不到v7的。github

在terminal中執行,放在永久環境變量中不太必要promise

$ NVM_NODEJS_ORG_MIRROR=https://nodejs.org/download/test

而後查看一下遠端版本app

$ nvm ls-remote
         v4.6.1
         v6.7.0
         v7.0.0

而後就開始Node v7吧koa

$ nvm install 7
$ nvm use 7

我在安裝的時候沒有成功,後來是https://nodejs.org/download/test/v7.0.0-test201610107f7d1d385d/下載的源文件安裝的。異步

若是上面的不可用,能夠參考評論中的https://cnodejs.org/topic/580027e20bab808265185db2#58004364fdf3bd3d651185f4async

示例代碼解讀

定義class函數

// An example class which generates a hello world greeting
class Demo {
  async greeting() {
    const h = await this.world();
    return h;
  }
  world() {
    return Promise.resolve('hello world');
  }
}

在promise時代,要作到每一個流程函數都返回promise,而後再組裝,這稱爲廣義的promisify。如今換成async函數,主要是取決於await能組合的2種作法測試

  • 徹底使用async函數
  • 使用返回promise的流程函數

本例中,就很是典型,在async函數greeting裏經過await來執行this上下文中的world函數,很明顯world是返回Promise的函數。

我以前也說過promise的重要性,幾乎貫穿全部異步流程控制中。async/await時代的前期,它仍是主力,不管是已有項目-知識遷移,仍是組裝和簡化的便利性。

在Koa 2.x裏使用

// Import Koa v2 dependency
const Koa = require('koa');

// Initialize Demo class instance
const demo = new Demo();

// Initialize Koa v2 instance
const app = new Koa();
const port = 3000;

// uses async arrow functions
app.use(async (ctx, next) => {
  try {
    await next(); // wait until we execute the next function down the chain, then continue;
  } catch (err) {
    ctx.body = { message: err.message };
    ctx.status = err.status || 500;
  }
});

// Set up a route
app.use(async ctx => {
  const retval = await demo.greeting();
  ctx.body = retval;
});

// Start listening on specified port
app.listen(port, function() {
  console.log("listening on port", port);
});

// Start the app with "node --harmony-async-await" flag, and go to http://localhost:3000

Koa 2.x的簡單代碼就不解釋了,有疑問能夠參見https://github.com/i5ting/stuq-koa

執行

$ node -v; node --harmony-async-await index.js

很明顯,是經過--harmony-async-await這個flag來執行的。也就是說尚未變成內置功能。這讓咱們不由想起當年generator的狀況,從0.10,0.12····4.x。也就是說,變成內置還要很長時間

好在,咱們已經可以體驗了,老雷說:「這幾個月js發展真快啊」,起來嗨~

相關文章
相關標籤/搜索