[Node.js] util.promisify

Node.js中的回调函数,根据约定具有统一形式,(err, value)=>{}
因此,我们可以用统一的办法,将接受这种回调函数作为参数的函数,转换为返回promise的函数,
Node.js v8.0.0版本增加了util.promisify函数,用以实现这个功能。

const fs = require('fs');
const { promisify } = require('util');

const readFileAsync = promisify(fs.readFile);

async function read() {
    const content = await readFileAsync('./test.js', 'utf-8');
    return content;
}

read().then(v => {
    console.log(v);
});

其中async functions是计划加入到ECMAScript 2017中的新特性,已经在Node v7.6.0实现。
async function调用后会返回一个promise,await接受一个promise,并把promise resolved的值作为await表达式的值。

用户可以自定义promisify的结果,
如果用户设置了函数的util.promisify.custom属性值,
promisify会使用该属性值,作为promisify的结果值。

const fs = require('fs');
const util = require('util');

const fn = (param, callback) => { };
console.log(util.promisify(fn) === fn[util.promisify.custom]);  //false

fn[util.promisify.custom] = () => { };
console.log(util.promisify(fn) === fn[util.promisify.custom]);  //true    

参考

Node.js 8: util.promisify()
Node.js Documentation: util.promisify
Releases: Node v7.6.0
tc39/proposals: Finished Proposals
MDN: async function

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 弄懂js异步 讲异步之前,我们必须掌握一个基础知识-event-loop。 我们知道JavaScript的一大特点...
    DCbryant阅读 2,750评论 0 5
  • 异步编程对JavaScript语言太重要。Javascript语言的执行环境是“单线程”的,如果没有异步编程,根本...
    呼呼哥阅读 7,334评论 5 22
  • 框架提出的背景 ES6/7带来的变革 自ES6确定和ES7中async/await开始普及,Node的发展变得更加...
    宫若石阅读 8,541评论 1 14
  • 本文首发在个人博客:http://muyunyun.cn/posts/7b9fdc87/ 提到 Node.js, ...
    牧云云阅读 1,702评论 0 3
  • 椰树如父,伟岸威武, 笔直挺阔,犹如一把擎天大伞,遮风挡雨,四季常绿。 椰树如母,树叶婆娑,孕育着富...
    家乡雪韵阅读 855评论 5 15