co.js

简介

co.js是基于生成器函数的支持node端和浏览器端易用的控制流库,它使用Promise对象让你以一种优雅的方式书写非阻塞代码,从而避免传统的嵌套回调。
已发布[email protected]依赖于Promise对象,这主要是为支持ES7中的async/await提案做铺垫。主要API的改变是co()函数的调用方式,之前co返回的是一个供你后续调用带有一个毁掉和可选参数的“chunk”函数,现在返回的是一个Promise对象。

兼容性

co@4+需要有Promise实现,对于node <0.11和老版本浏览器,必须引入Promise ployfill。
如果你使用的node v0.10.x或不支持生成器函数的浏览器,你必须是使用gnode或regenerator。
如果你使用node v0.11.x,你应该打开--harmoney-generator开关或者以--harmoney运行访问生成器函数。
对于node v4+的版本,可以直接使用co不再需要其他配置。

相关库

任何返回Promise对象的库都可以很好的跟co配合使用,其中mz包装了node返回Promise,更多库可以参见Wiki 。

Yieldables

当前支持的yieldable对象有:

  • promise
  • thucks(functions)
  • array(parallel execution)
  • objects(parallel execution)
  • generators(delegation)
  • generator functions(delegation)

co支持嵌套的yieldable对象,也就是说可以以对象、数组等嵌套Promise对象。

API

1. co(fn*).then(val =>)

Returns a promise that resolves a generator, generator function, or any function that returns a generator.

co(function*() {
       return yield Promise.resolve(true);
}).then(function(val) {
      console.log(val);
},function(err) {
     console.error(err.stack);
});

2. var fn = co.wrap(fn*)

Convert a generator into a regular function that returns a Promise.

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

fn(true).then(function(val) {
     console.log(val);
});

你可能感兴趣的:(co.js)