Skip to content

Commit

Permalink
doc: add mention for using promisify on class methods
Browse files Browse the repository at this point in the history
  • Loading branch information
lundibundi committed Nov 10, 2019
1 parent 4b97c3a commit 23ce94a
Showing 1 changed file with 29 additions and 0 deletions.
29 changes: 29 additions & 0 deletions doc/api/util.md
Original file line number Diff line number Diff line change
Expand Up @@ -862,6 +862,35 @@ 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.

Due to the way JavaScript Context works using `promisify()` on class methods
or other methods that use `this` from the context may not work as expected
unless handled specially:

```js
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'
```

### Custom promisified functions

Using the `util.promisify.custom` symbol one can override the return value of
Expand Down

0 comments on commit 23ce94a

Please sign in to comment.