Skip to content

Latest commit

 

History

History
76 lines (54 loc) · 1.5 KB

co.md

File metadata and controls

76 lines (54 loc) · 1.5 KB
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.

Running generators

co(function * () {
  yield Promise.resolve(true)
}).then(...)

A generator can yield a thunk or promise. Using co() will immediately invoke the block inside it.

Generator → Promise

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.

Generator → Node callback

var get = unyield(function * () {
})

get(function (err, res) { ... })

Use unyield. (You can thunkify this later)

Node callback → Thunk

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.

Using Node.js API

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.