JS-Promisify

if(err) {

reject(err)

} else {

resolve(res)

}

})

})

}

Node.js提供的Promisify方法

const {promisify} = require(‘util’) // 对象结构,promisify是util模块的一个方法,它接收一个错误优先的异步函数,返回一个Prmise对象

readFilePromisify = promisify(fs.readFile)

async function fn(){

await readFilePromisify(‘./1.txt’,‘utf8’)

}

这简直是“如听仙乐耳暂明”般的体验。

被Node.js的util模块的promisify处理过的fs.readFile异步函数,不需要再封装进Promise对象中,不需要再定义回调函数。

因为这都被util.promisify给内部封装了。

实现简单的Promisify,帮助理解其工作原理

promisify方法结构是:

接收一个错误优先的异步函数A

返回一个和A具有相同形参(不包括回调函数形参)的函数B

关于错误优先的异步函数解释

常见的异步任务都需要一个回调函数参数,而这个回调函数用于处理异步操作完成后的结果。

所以回调函数需要接收异步操作的结果,我们知道异步操作可能成功,可能失败。所以

回调函数的接收参数分为两个成功参数,失败参数。

而Node.js提倡错误优先的回调函数形参定义规则。

即err形参作为回调函数的第一个形参,后面的参数就是成功的形参。

这样做的好处就是规范了异步任务的回调函数形参定义。方便后续统一对回调函数进行处理。

promisify的工作原理

promisify方法入参是错误优先的异步函数A,返回是“不需要回调函数形参的,其余形参相同“的函数B。

例如:

fs.readFile(文件路径,编码,回调函数)  就是A

readFilePromisify(文件路径,编码) 就是B

那么B的作用是什么呢?

B的作用是将A封装进Promise对象,即将原本我们每次都要对异步函数的封装Promise动作,内置到B中,只需要调用B,就完成了对异步函数的Promise封装。

B为什么不需要传入回调函数参数?

1、B可以猜测到A的回调函数的架构,即错误优先

2、A的回调函数主要用于设置Promise对象的状态和结果,属于封装Promise的重要步骤,需要内敛到B中,而无法在B的外面设置。

function promisify(fn){// promisify接收一个错误优先的异步函数fn

return function(…args){ // promisify返回一个函数,该函数接收和fn的一样的除了回调函数参数外的参数

return new Promise((resolve,reject)=>{ // 返回一个Promise对象,该对象的状态和结果自动设置

fn.call(this,…args,(err,res)=>{ // 等价于 this.fn(…args,(err,res)=>{})

if(err) {

reject(err)

} else {

resolve(res)

最后

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。

因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点!不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
些资料都将为你打开新的学习之门!**

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值