co node.js库的目的是什么?

时间:2016-07-08 12:17:02

标签: node.js ecmascript-6 generator

我是node.js的新手,正在开发一个代码库,它通过包含对生成器函数的调用来利用co库。一个简化的例子如下所示:

module.exports.gatherData = function*()
{
  // let img = //get the 1 pixel image from somewhere
  // this.type = "image/gif";
  // this.body = img;

  co(saveData(this.query));
  return;

};

function *saveData(query)
{   
  if(query.sid && query.url)
  {
      // save the data
  }
}

所以我去了github上的co主页,描述说:

"基于生成器的nod​​ejs和浏览器的控制流程良好性,使用promises,让你以一种很好的方式编写非阻塞代码。"

在node.js的上下文中,这段代码也不会非阻塞吗?

yield saveData(this.query)

1 个答案:

答案 0 :(得分:3)

生成器功能没有任何阻塞/非阻塞。它们只是表达可中断控制流的工具。

流如何被中断仅由生成器的调用者决定,在这种情况下是co库,它在产生它们时等待异步值。有很多方法可以使用co

为这只猫设置皮肤
  • module.exports.gatherData = co.coroutine(function*() {
      …
      yield saveData(this.query));
    });
    var saveData = co.coroutine(function* (query) {   
      if(query.sid && query.url) {
          // save the data
      }
    });
    
  • module.exports.gatherData = co.coroutine(function*() {
      …
      yield co(saveData(this.query));
    });
    function *saveData(query) {   
      if(query.sid && query.url) {
          // save the data
      }
    }
    
  • module.exports.gatherData = co.coroutine(function*() {
      …
      yield* saveData(this.query));
    });
    function *saveData(query) {   
      if(query.sid && query.url) {
          // save the data
      }
    }