当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Node.js util.promisify(original)用法及代码示例


util.promisify(original)

添加于:v8.0.0

参数

采用遵循通用 error-first 回调样式的函数,即将 (err, value) => ... 回调作为最后一个参数,并返回返回承诺的版本。

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

const stat = util.promisify(fs.stat);
stat('.').then((stats) => {
  // Do something with `stats`
}).catch((error) => {
  // Handle the error.
});

或者,等效地使用 async function s:

const util = require('node:util');
const fs = require('node: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 将返回其值,请参阅 Custom promisified functions

promisify() 假定 original 是一个在所有情况下都将回调作为其最终参数的函数。如果original 不是函数,则promisify() 将抛出错误。如果original 是一个函数,但它的最后一个参数不是error-first 回调,它仍将传递一个error-first 回调作为它的最后一个参数。

在类方法或使用 this 的其他方法上使用 promisify() 可能无法按预期工作,除非经过特殊处理:

const util = require('node: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'

相关用法


注:本文由纯净天空筛选整理自nodejs.org大神的英文原创作品 util.promisify(original)。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。