util.promisify(original)


    采用遵循常见的错误优先的回调风格的函数(也就是将 (err, value) => ... 回调作为最后一个参数),并返回一个返回 promise 的版本。

    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('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.
    });

    Or, equivalently using async functions:

    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}`);
    }

    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('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'