Add co.js

This commit is contained in:
Rico Sta. Cruz 2015-09-21 13:14:36 +08:00
parent 92cde8d21a
commit 58fae8c019
1 changed files with 54 additions and 0 deletions

54
co.md Normal file
View File

@ -0,0 +1,54 @@
---
title: co
---
[co]: https://github.com/tj/co
[thunkify]: https://github.com/visionmedia/node-thunkify
[unyield]: https://github.com/MatthewMueller/unyield
[co] allows you to use generators to manage async flow.
### Generator → promise
A generator can `yield` a thunk or promise. Using `co()` will immediately invoke the block inside it.
```js
co(function * () {
yield Promise.resolve(true)
}).then(...)
```
### Generator() → Promise()
Use `co.wrap()`. Most of the time, you'll be using co.wrap.
```js
var fn = co.wrap(function * (val) {
return yield Promise.resolve(val)
})
fn().then(...)
```
### Generator() → Node callback()
Use [unyield]. (You can [thunkify] this later)
```js
var get = unyield(function * () {
})
get(function (err, res) { ... })
```
### Node callback() → Thunk()
Use [thunkify]. You can yield this.
```js
var readFile = thunkify(fs.readFile)
co(function * () {
var data = yield readFile('index.txt', 'utf-8')
})
```