util.promisify(original)
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(`This directory is owned by ${stats.uid}`);
}
如果存在 original[util.promisify.custom]
属性,则 promisify
将返回其值,请参阅自定义的 promise 化函数。
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'
original
<Function>- Returns: <Function>
Takes a function following the common error-first callback style, i.e. taking
an (err, value) => ...
callback as the last argument, and returns a version
that returns promises.
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.
});
Or, equivalently using async function
s:
const util = require('util');
const fs = require('fs');
const stat = util.promisify(fs.stat);
async function callStat() {
const stats = await stat('.');
console.log(`This directory is owned by ${stats.uid}`);
}
If there is an original[util.promisify.custom]
property present, promisify
will return its value, see Custom promisified functions.
promisify()
assumes that original
is a function taking a callback as its
final argument in all cases. If original
is not a function, promisify()
will throw an error. If original
is a function but its last argument is not
an error-first callback, it will still be passed an error-first
callback as its last argument.
Using promisify()
on class methods or other methods that use this
may not
work as expected unless handled specially:
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'