Cheat Sheet速查表
跳转到主要内容

co 速查表

本文根据 Devhints / co 翻译。代码示例及版本范围沿用原文。原文标注更新日期:2017-10-27。

co 允许您使用生成器(generator)来管理异步流程。

运行生成器

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

生成器可以 yield 一个 thunk(延迟执行函数)或 Promise。使用 co() 会立即调用其内部的代码块。

生成器 → Promise

var fn = co.wrap(function * (val) {
  return yield Promise.resolve(val)
})

fn().then(...)

使用 co.wrap()。大多数情况下,您会使用 co.wrap。

生成器 → Node 回调(callback)

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

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

使用 unyield。(您可以 thunkify 稍后进行此操作)

Node 回调 → Thunk

var readFile = thunkify(fs.readFile)

co(function * () {
  var data = yield readFile('index.txt', 'utf-8')
})

使用 thunkify。您可以 yield(产出)它。您也可以使用 thenify 。

使用 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) => { ... })

使用 mz 来处理异步 Node.js API。您也可以选择 thunkify 或 thenify 来替代它们。