co.js

简介

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

兼容性

co@4+需要有Promise实现,对于node <0.11和老版本浏览器,必须引入Promise ployfill。
如果你使用的node v0.10.x或不支持生成器函数的浏览器,你必须是使用gnoderegenerator
如果你使用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);
});
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容