# co

异步控制 把函数全部自动向下执行 next->next->done

# 实例

co(function*() {
  var result = yield Promise.resolve(true);
  return result;
}).then(
  function(value) {
    console.log(value);
  },
  function(err) {
    console.log(err.stack);
  }
);

# 如果想把一个co-generator-function转成真实的function并返回一个promise可以使用co.wrap(fn*)

var fn = co.wrap(function*(val) {
  return yield Promise.resolve(val);
});
fn(true)
  .then(function(val) {})
  .catch(onerror);
function onerror(err) {
  console.log(err.stack);
}

在 koa2 中做koa-swig封装的做法

import koa from "koa";
import render from "koa-swig";
import path from "path";
import co from "co";
const app = new koa();
app.context.render = co.wrap(
  render({
    root: path.join(__dirname, "../views"),
    autoescape: true,
    cache: "memory",
    ext: "html",
    varControls: ["[[", "]]"],
    writeBody: false,
  })
);
app.use(...)
app.listen(3000, ()=>{
  console.log(`app is listening on 3000`);
})