[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

你可能感兴趣的:([Node.js] util.promisify)