NPM酷库,每天两分钟了解一个流行的NPM库。JavaScript的优势在于它是基于异步事件模型的,因此Node.js可以拥有非常强大的性能。但是JavaScript回调方法做的是异步处理,对于多级情况下的人来说是噩梦,所以称之为回调区:Model.count(filters,(error,count)=>{if(error){console.error(error);}else{Model.find(filters,(error,result)=>{if(error){console.error(error);}else{//...}})}})以上code,只包含两层回??调。在实际开发中,我们经常会遇到七八层回调的情况。你可以想象这是多么可怕。针对这种情况,产生了一系列的异步任务管理库。Promise是最常用的一种。PromisePromise是一个划时代的库,因为在Promise产生之后,后续的ES7标准async/await都是基于Promise的,async/await机制让人可以用同步代码来处理异步任务,彻底解决了回调问题。Promise的机制其实很简单。它将异步任务抽象为三种状态:Pending(进行中)、Fulfilled(完成)和Rejected(失败)。对于上面的代码,使用Promise方法可以写成:Model.count(filters).then((count)=>{returnModel.find(filters);}).then((results)=>{//...}).catch((error)=>{console.error(error)});用Promise改写后,原来的多层回调会被“扁平化”成1~2层,形成链式调用。当然前提是上面的Model.find()和Model.count()必须支持Promise方法调用。如果没有,我们可以将回调函数转换为Promise样式:{reject(error);}else{resolve(results);}});});}上面代码中的find()函数返回一个Promise对象。不幸的是,一些古老的浏览器没有内置的Promise对象,所以我们可以使用promise库:constPromise=require('promise');参考https://developer.mozilla.org...https://github.com/then/promise
