Native Async Functions with Node v7

Node.js v7.0 已经正式进入 Current 了,也出现在了官网的首页。

async-functions

该版本更新 V8引擎 到 v54,集成了我最爱的一个 feature: async functions,所以特别关注。

Install

1
2
$ NVM_NODEJS_ORG_MIRROR=https://npm.taobao.org/mirrors/node nvm install 7.0.0
$ nvm use 7.0.0

体验

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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()

如果直接执行,会报错:

1
2
3
4
5
$ node app.js

async function timer () {
^^^^^^^^
SyntaxError: Unexpected token function

需要开启 --harmony-async-await

1
2
3
4
$ node --harmony-async-await app.js

timer started
timer finished

## koa2

koa2 也终于可以进入正式版了,虽然一直在用。 但目前仍是用 babel 进行编译的,一直期待项目可以不再需要编译。目前只剩下 ES Module 了。

一段 koa2 的代码(有没有一种美到的赶脚):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// 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.url} - ${ms}ms`)
})

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

app.listen(3000)