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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值