简介
apr-awaitify 是一个 Node.js 的 NPM 包,该包可以将使用 Node.js 中回调函数的函数转换为 Promise 对象。它极大地简化了 Node.js 项目开发中使用并发处理的难度。
安装
使用 npm 进行安装:
npm install apr-awaitify
代码示例
-- -------------------- ---- ------- ----- ----------- - ------------------------ ----- -- - -------------- ----- ------------ - ------------------------ ----- -------- ----- - ----- ----- - ----- ------------------ ------------------- - ---------------------------
功能 & 设计思想
在 Node.js 官方文档中,回调函数是处理异步操作最常用的方式。有些函数导出的是异步 API,使用时必须提供回调函数来处理异步返回结果。使用回调函数处理异步函数在代码编写过程中经常会遇到不少问题:回调函数嵌套、多次错误处理等,还有一些错误不容易被发现。
在这种情况下,利用 Promise 将异步函数进行封装就可以将函数改写成使用 async/await 的方式调用,提高了代码的可读性,可维护性和安全性,也方便了异步流程的控制和管理。
apr-awaitify 正是利用这个思想,将回调函数改写成 Promise 对象。
原理
apr-awaitify 的原理相当简单,它利用了 Node.js 内置的 util 包中的 promisify 函数,该函数可以将使用回调函数的函数自动转换为 Promise 对象。
使用 & 初步试用
apr-awaitify 的使用非常简单,只需要用当前要操作的函数进行包装:
const aprAwaitify = require('apr-awaitify'); const fs = require('fs'); const readdirAsync = aprAwaitify(fs.readdir);
这里我们将 fs 的 readdir
函数包装成了 readdirAsync
。
实现原理
apr-awaitify 的核心是利用了 Node.js 内置的 util
包中的 promisify
函数,该函数可以将使用回调函数的函数自动转换为 Promise 对象。
promisify
函数的源码非常简单,具体实现如下:
-- -------------------- ---- ------- ------------------------- - ------------ - ------ ---------- - --- ---- - ------------------------------------- --- ------ --- ------------------------- ------- - ----------------------- ---------- - -- ----- - ------ ------------ - ------ ------------------- --- -------------- ------ --- -- -
实现逻辑非常简单,fn 参数表示需要转换为 Promise 的函数,返回值是返回一个新的函数。新的函数将传递给原有的函数的参数转换为数组传入,然后返回一个新的 Promise 对象,resolve() 传入的是被传递的回调函数的值,reject() 则表示回调函数返回的错误信息。
因此,apr-awaitify 只需使用内置的 promisify
函数即可将出现回调的函数转换为 Promise 对象。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6005739581e8991b448e9857