北京 互联网公司,seo外包平台,网站编辑工作好做吗,小程序云开发文档本篇文章又是一期优雅的代码编程介绍———回调函数。 传统的nodejs编程都是这样的
const fs require(fs)
fs.readFile(test.txt,utf8, function(err, dataStr){if(err){}
}) 嵌套层级如果多了就成回调地狱了。如果我们将这种风格的代码转换成这样呢#xff1f;
const fs … 本篇文章又是一期优雅的代码编程介绍———回调函数。 传统的nodejs编程都是这样的
const fs require(fs)
fs.readFile(test.txt,utf8, function(err, dataStr){if(err){}
}) 嵌套层级如果多了就成回调地狱了。如果我们将这种风格的代码转换成这样呢
const fs require(fs);
const {promisfy, waitFor, promisfyNoError} require(promisfy);
const readFile promisfy(fs.readFile);
let content await readFile(myfile.txt, {encoding:utf8});
return content;
http.createServer(80, function(req, res) {async function handleRequest(req, res) {if (req.method POST) {req.body await waitFor(req.sock, data);}}
}) 这种promisfy的风格是不是简洁优雅一行就搞定了。
安装
npm install --save promisfy promisfy包里封装了以下三个函数
promisfy: 处理fs这种回调API。waitFor: 处理监听事件和流的对象具有xx.on(event),xx.on(data),xx.on(end)这些监听事件。promisfyNoError: 处理回调没有错误抛出的API
源码
参数传入需要promisfy的函数和上下文返回值返回一个新函数
const readFile promisfy(fs.readFile);
let content await readFile(myfile.txt, {encoding:utf8}); 解析代码
1.通过agruments内置对象取到函数readFile的参数。 2.调用readFile返回的是一个Promise对象。 3.Promise里声明了一个callback函数。callback传入的参数结构是第一个为err对象剩余参数为成功的结果。err对象通过reject函数处理剩余参数用resolve函数处理。 4.处理函数的参数fnArgs,args和callback。 5.最后调用这个函数并传入上下文。
promisfyNoError和上述逻辑一样除去了err对象的部分;waitFor:对普通事件监听和流处理做的promisfy封装
结束语
对于回调这种风格的函数还有事件监听和数据流进行promisfy处理后就节省了很多很多代码行数清晰明了。优雅的风格依然还在还能做一个艺术工程师。
类似的我们在微信网页开发的时候使用weixin-jssdk,也可以自己封装一个promisfy风格的函数。我们的代码里也不会有看着费劲的屎山了。
wx.request({xxx:,xxx:,xxx:,success(){},fail(){}
}) 最后
为大家准备了一个前端资料包。包含54本2.57G的前端相关电子书《前端面试宝典附答案和解析》难点、重点知识视频教程全套。 有需要的小伙伴可以点击下方卡片领取无偿分享