當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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)。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。