title | category | layout | updated | weight | intro |
---|---|---|---|---|---|
co |
JavaScript libraries |
2017/sheet |
2017-10-27 |
-1 |
[co](https://github.com/tj/co) allows you to use generators to manage async flow.
|
co(function * () {
yield Promise.resolve(true)
}).then(...)
A generator can yield
a thunk or promise. Using co()
will immediately invoke the block inside it.
var fn = co.wrap(function * (val) {
return yield Promise.resolve(val)
})
fn().then(...)
Use co.wrap()
. Most of the time, you'll be using co.wrap.
var get = unyield(function * () {
})
get(function (err, res) { ... })
Use unyield. (You can thunkify this later)
var readFile = thunkify(fs.readFile)
co(function * () {
var data = yield readFile('index.txt', 'utf-8')
})
Use thunkify. You can yield this. You can also use thenify too.
var readFile = require('mz/fs').readFile
var getLines = co.wrap(function * (filename) {
var data = yield readFile(filename, 'utf-8')
return data.split('\n')
})
getLines('file.txt').then((lines) => { ... })
Use mz for async Node.js API. You can also either thunkify or thenify them instead.