node.js学习(八、回调优化)

来源:互联网 发布:源码交易系统 编辑:程序博客网 时间:2024/05/18 00:27

node.js的api中大量使用了回调函数。当业务较复杂时,代码就可能嵌套多层function回调。这样会照成后续代码难以阅读。
通过第三方co库可以解决此问题。在介绍co库前,先看一下如何查找第三方库及其文档。
node.js提供了第三方库的网站https://www.npmjs.com/
打开https://www.npmjs.com/ 你会发现最上方有一个搜索框。类似百度,你仅需要搜索需要的关键词,就会出现大量的相关库。如搜索mysql,就会出现下图列表。
这里写图片描述
点击mysql即可查看mysql的文档。
这里我们再来搜索一下co模块,得到如下列表:
这里写图片描述

点击第一项,进入详情页:
这里写图片描述
在服务器允许命令npm install 模块名 即可安装该模块
左侧为详细的api文档,阅读文档你就知道该模块如何使用。

api中列出了一个最典型的例子

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

其中

function* (val) {  return yield Promise.resolve(val);}

是一个典型的异步转同步的方法,yield是阻塞关键字,作用是收集其后执行方法的异步返回结果。需要注意的是使用yield的function都要在function后加*。但是带*的function不能像普通的方法一样在任何地方调用。下面举个例子

     //正确调用     sum(1,2);     //错误调用,带*方法无法直接调用     getRes(1,2);  }  function sum(a,b){      return a+b;  }  function* getRes(a,b){      yield  ....  }

co模块即解决了如上错误调用,修改为co(getRes(1,2))即可。由此可看出co的作用即为将一个包含异步阻塞的方法转换为一个普通的方法。后续章节会讲述更多yield 异步阻塞的例子。关于co的实现原理,可查看其源码。github.com/tj/co

0 0
原创粉丝点击