Node.js 8 于上个月月底正式发布,带来了 很多新特性 。其中比较值得注意的,便有 util.promisify() 这个方法。

util.promisify()

虽然 Promise 已经普及,但是 Node.js 里仍然有大量的依赖回调的异步函数,如果我们每个函数都封装一次,也是齁麻烦齁麻烦的,比齁还麻烦。

所以 Node8 就提供了 util.promisify() 这个方法,方便我们快捷的把原来的异步回调方法改成返回 Promise 实例的方法,接下来,想继续用队列,还是 await 就看需要了。

我们看下范例:

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.
});
怎么样,很简单吧?按照文档中的说法,只要符合 Node.js 的回调风格,所有函数都可以这样转换。也就是说,满足下面两个条件即可。

最后一个参数是函数
回调函数的参数为 (err, result),前面是可能的错误,后面是正常的结果
结合 Await/Async 使用

同样是上面的例子,如果想要结合 Await/Async,可以这样使用:

const util = require(‘util’);
const fs = require(‘fs’);

const stat = util.promisify(fs.stat);
async function readStats(dir) {
try {
let stats = await stat(dir);
// Do something with stats
} catch (err) { // Handle the error.
console.log(err);
}
}
readStats(‘.’);
自定义 Promise 化处理函数

那如果函数不符合这个风格,还能用 util.promisify() 么?答案也是肯定的。我们只要给函数增加一个属性,util.promisify.custom ,指定一个函数作为 Promise 化处理函数,即可。请看下面的代码:

const util = require(‘util’);

function doSomething(foo, callback) {
// …
}

doSomething[util.promisify.custom] = function(foo) {
return getPromiseSomehow();
};

const promisified = util.promisify(doSomething);
console.log(promisified === doSomething[util.promisify.custom]);
// prints ‘true’
如此一来,任何时候我们对目标函数 doSomething 进行 Promise 化处理,都会得到之前定义的函数。运行它,就会按照我们设计的特定逻辑返回 Promise 实例。

我们就可以升级以前所有的异步回调函数了。

util.promisify相关推荐

  1. util.promisify 的那些事儿

    util.promisify是在node.js 8.x版本中新增的一个工具,用于将老式的Error first callback转换为Promise对象,让老项目改造变得更为轻松. 在官方推出这个工具 ...

  2. 如何将文件地址转为url_Node.js 源码解析 util.promisify 如何将 Callback 转为 Promise

    Nodejs util 模块提供了很多工具函数.为了解决回调地狱问题,Nodejs v8.0.0 提供了 promisify 方法可以将 Callback 转为 Promise 对象. 工作中对于一些 ...

  3. callback函数_Nodejs 源码解析 util.promisify 如何将 Callback 转为 Promise

    Nodejs util 模块提供了很多工具函数.为了解决回调地狱问题,Nodejs v8.0.0 提供了 promisify 方法可以将 Callback 转为 Promise 对象. 工作中对于一些 ...

  4. 文件从头开始读函数_如何从头开始编写自己的Promisify函数

    文件从头开始读函数 介绍 (Introduction) In this article, you will learn how to write your own promisify function ...

  5. Npm 5 package locks

    上一篇文章中提到了几个前端界的版本大佬,这不,上个月 Node 又发布了 8.0 版本. Node 8 这次升级有哪些令人眼前一亮的新特性? 新增了 Node.js API (N-API) 新增了 u ...

  6. 如何用JavaScript的回调函数做出承诺

    by Adham El Banhawy 由Adham El Banhawy 如何用JavaScript的回调函数做出承诺 (How to make a Promise out of a Callbac ...

  7. 57 Node.js异步编程

    技术交流QQ群:1027579432,欢迎你的加入! 欢迎关注我的微信公众号:CurryCoder的程序人生 1.Node.js异步编程 1.1 Node.js中的异步API 如果异步API后面的代码 ...

  8. node mysql await_node.js中对 mysql 进行增删改查等操作和async,await处理

    要对mysql进行操作,我们需要安装一个mysql的库. 一.安装mysql库 npm install mysql --save 二.对mysql进行简单查询操作 const mysql = requ ...

  9. Node.js模拟发起http请求从异步转同步的5种方法

    使用Node.js模拟发起http请求很常用的,但是由于Node模块(原生和第三方库)提供里面的方法都是异步,对于很多场景下应用很麻烦,不如同步来的方便.下面总结了几个常见的库API从异步转同步的几种 ...

  10. 对Promise的一些深入了解

    1.介绍promise和模仿Promise.all和Promise.race promise的设计主要是解决回调地狱(接收结果用回调函数来处理,但必须传入回调函数)的问题,由一层层嵌套回调函数改为由t ...

最新文章

  1. 小学计算机管理员培训,中小学计算机管理员培训心得体会-20210401075623.docx-原创力文档...
  2. oracle authentication_services,理解SQLNET.AUTHENTICATION_SERVICES参数
  3. 20165203《Java程序设计》第四周学习总结
  4. 深井软岩巷道群支护技术与应用_金能煤业公司组织观看千米深井软岩巷道大变形机理及围岩控制技术讲座...
  5. 景驰无人车北京子公司上亿资金被冻结!潘思宁夺回法人身份
  6. 推荐系统(6):推荐算法之基于内容的推荐算法
  7. Turnitin查重原理是什么?
  8. MacOS 连接网络打印机后一直不能打印
  9. android 收税计算器,个人所得税计算器2021
  10. 认知升级:从首席架构师到CTO
  11. 优雅的使用vue+Dcloud(Hbuild)开发混合app
  12. 程序员辞职回老家山洞写代码,二年敲了 45 万行!
  13. could和may区别请求_can和may的区别及用法
  14. day03--java基础编程:面向对象,构造方法,代码块讲解,this super,static,final,访问修饰符,方法重写,向上/下造型,main方法,抽象类,接口,设计模式,异常,内部类
  15. php 限定字符长度,php 字符串长度限制
  16. matlab 画图添加图例时,改变图例中字体大小
  17. 一个涂鸦笔记本的自定义View第三方库
  18. 降低 Spark 计算成本 50.18 %,使用 Kyligence 湖仓引擎构建云原生大数据底座,为计算提速 2x
  19. LeetCode 1438 绝对差不超过限制的最长连续子数组
  20. 一文看懂全球5G应用布局与发展趋势

热门文章

  1. js实现漂亮的雪花飘落效果
  2. 小程序之botton默认带边框的问题
  3. CH340g的使用说明
  4. 史上最详细Multi-grained Spatio-Temporal Features Perceived Network for Event-based Lip-Reading文章记录
  5. python中的数学函数汇总
  6. 开源软件推荐-TMS运输管理系统 KYTMS
  7. KEPServer EX6的Modbus、MQTT和REST Server一站式配置整理说明
  8. Win10任务栏卡死解决方案
  9. React-微信网页开发总结
  10. 如何修改计算机ip 地址子网掩码,如何查看和修改主机的ip地址和子网掩码