已写下 85 篇博客文章,共计 101,765 字,完整阅读预计需要 8.5 小时,已有 1,178,489 次阅读。

按照【分类】筛选文章

按照【标签】筛选文章

Cover

Promise、async/await 使用经验

# Promise 产生:改善 Callback Hell 问题 ## 什么样的方法可以用 Promise 重写 例 1: ```javascript mysql.query('SELECT 1 + 1 AS solution', function (err, rows, fields) { if (err) { throw err; } // 对查询结果进行操作 console.log('The solution is: ', rows[0].solution); }); ``` 例 2: ```javascript fs.readFile('myfile.txt', function (err, file) { if (err) { throw err; } // 对file进行操作 }); ``` ## 如何将一个回调方法改为 Promise ### Promisify 一般情况下,该方式首选。 ```javascript const util = require('util'); const fs = require('fs'); const stat = util.promisify(fs.stat); stat('.') .then((stats) => { // Do something with `stats` }) .catch((error) => { // Handle the error. }); ``` ### new Promise() 虽然所有的最终实现原理应该都是这样,但这种写法上的话,又再次出现了地狱回调的问题,可读性非常差。 ```javascript const fs = require('fs'); const stat = (...args) => new Promise((resolve, reject) => { fs.stat(...args, (err, stats) => { if (err) { reject(err); } else { resolve(stats); } }); }); stat('.') .then((stats) => { // Do something with `stats` }) .catch((error) => { // Handle the error. }); ``` ### Defer 兼顾了可读性的一种写法。 ```javascript const fs = require('fs'); const getDefer = () => { const deferred = {}; deferred.promise = new Promise((resolve, reject) => { deferred.resolve = resolve; deferred.reject = reject; }); return deferred; }; const stat = (...args) => { const deferred = getDefer(); fs.stat(...args, (err, stats) => { if (err) { deferred.reject(err); } else { deferred.resolve(stats); } }); return deferred.promise; }; stat('.') .then((stats) => { // Do something with `stats` }) .catch((error) => { // Handle the error. }); ``` ## 如何调用 Promise 方法 ### 直接执行 ```javascript promiseFn() .then() .catch() .then() // 此处的 .then 未经过异常捕获 .finally(); // 不管成功失败,最终都将执行 ``` ### 批量执行 ```javascript Promise.all([promiseFn1(), promiseFn2()]).then(); Promise.allSettled(); // 推荐 Promise.race(); Promise.any(); ```  

Cover

Nest.js 基础入门

除了在 Controller 中,在 Model、 Service 等其他地方内层方法均可以进行优化,因为外层调用的时候已经带上了 `await`。同时,还需要注意各个方法的返回类型,养成良好习惯。 

Cover

Gitbook 捐赠打赏插件

 

Cover

Node.js阿里云接口(Aliyun API)SDK

 

Cover

Hexo 文章阅读时长预计

 

Cover

Hexo 文章计数插件 WordCount

灵感来自[简书](http://www.jianshu.com/users/6c72e78080ff)。 字数统计的结果跟简书有差异,主要是由于本插件只统计了中文字数和英文单词数,所以结果会比简书统计的字数略少一些。 特别适合文字爱好者,比如我。 [![npm](https://img.shields.io/npm/dm/hexo-wordcount.svg)](https://npmjs.org/package/hexo-wordcount) [![npm](https://img.shields.io/npm/dt/hexo-wordcount.svg)](https://npmjs.org/package/hexo-wordcount) 项目地址: [https://npmjs.org/package/hexo-wordcount](https://npmjs.org/package/hexo-wordcount) ## 安装和使用 ### 安装 ``` npm i --save hexo-wordcount ``` ### 使用 修改`Themes`模板文件,在`Post`文章模板区域加入: ``` <span class="post-count">{{ wordcount(post.content) }}</span> ``` 即可统计单篇文章的字数。 ``` <span class="post-count">{{ totalcount(site) }}</span> ``` 上面这句是统计总字数的,可以放到`Footer`或其他位置里。