original{Function}- 返回: {Function}
传入一个遵循常见的错误优先的回调风格的函数(即以 (err, value) => ... 回调作为最后一个参数),并返回一个返回 promise 的版本。
const util = require('util');const fs = require('fs');const stat = util.promisify(fs.stat);stat('.').then((stats) => {// 使用 `stats`。}).catch((error) => {// 处理错误。});
或者,等效地使用 async function:
const util = require('util');const fs = require('fs');const stat = util.promisify(fs.stat);async function callStat() {const stats = await stat('.');console.log(`该目录归 ${stats.uid} 拥有`);}
如果存在 original[util.promisify.custom] 属性,则 promisify 将会返回其值,参见[自定义的 promise 化函数][Custom promisified functions]。
promisify() 在所有情况下都会假定 original 是一个以回调作为其最后参数的函数。
如果 original 不是一个函数,则 promisify() 将会抛出错误。
如果 original 是一个函数但其最后一个参数不是一个错误优先的回调,则它将仍会传入一个错误优先的回调作为其最后一个参数。
除非特殊处理,否则在类方法或使用 this 的其他方法上使用 promisify() 可能无法正常工作:
const util = require('util');class Foo {constructor() {this.a = 42;}bar(callback) {callback(null, this.a);}}const foo = new Foo();const naiveBar = util.promisify(foo.bar);// TypeError: Cannot read property 'a' of undefined// naiveBar().then(a => console.log(a));naiveBar.call(foo).then((a) => console.log(a)); // '42'const bindBar = naiveBar.bind(foo);bindBar().then((a) => console.log(a)); // '42'
