util: use a global symbol for util.promisify.custom
Define `util.promisify.custom` as `Symbol.for("nodejs.util.inspect.custom")`, rather than as `Symbol("util.inspect.custom")`. This allows custom `promisify` wrappers to easily/safely be defined in non‑Node.js environments. Fixes: https://github.com/nodejs/node/issues/31647 PR-URL: https://github.com/nodejs/node/pull/31672 Reviewed-By: Anna Henningsen <anna@addaleax.net> Reviewed-By: Colin Ihrig <cjihrig@gmail.com> Reviewed-By: Gus Caplan <me@gus.host> Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de>
This commit is contained in:
parent
7f44d2ced6
commit
ba684805b6
@ -995,11 +995,32 @@ throw an error.
|
||||
### `util.promisify.custom`
|
||||
<!-- YAML
|
||||
added: v8.0.0
|
||||
changes:
|
||||
- version: REPLACEME
|
||||
pr-url: https://github.com/nodejs/node/pull/31672
|
||||
description: This is now defined as a shared symbol.
|
||||
-->
|
||||
|
||||
* {symbol} that can be used to declare custom promisified variants of functions,
|
||||
see [Custom promisified functions][].
|
||||
|
||||
In addition to being accessible through `util.promisify.custom`, this
|
||||
symbol is [registered globally][global symbol registry] and can be
|
||||
accessed in any environment as `Symbol.for('nodejs.util.promisify.custom')`.
|
||||
|
||||
For example, with a function that takes in
|
||||
`(foo, onSuccessCallback, onErrorCallback)`:
|
||||
|
||||
```js
|
||||
const kCustomPromisifiedSymbol = Symbol.for('nodejs.util.promisify.custom');
|
||||
|
||||
doSomething[kCustomPromisifiedSymbol] = (foo) => {
|
||||
return new Promise((resolve, reject) => {
|
||||
doSomething(foo, resolve, reject);
|
||||
});
|
||||
};
|
||||
```
|
||||
|
||||
## Class: `util.TextDecoder`
|
||||
<!-- YAML
|
||||
added: v8.3.0
|
||||
|
@ -271,7 +271,7 @@ function getSystemErrorName(err) {
|
||||
return entry ? entry[0] : `Unknown system error ${err}`;
|
||||
}
|
||||
|
||||
const kCustomPromisifiedSymbol = Symbol('util.promisify.custom');
|
||||
const kCustomPromisifiedSymbol = SymbolFor('nodejs.util.promisify.custom');
|
||||
const kCustomPromisifyArgsSymbol = Symbol('customPromisifyArgs');
|
||||
|
||||
function promisify(original) {
|
||||
|
@ -33,6 +33,21 @@ const stat = promisify(fs.stat);
|
||||
assert.strictEqual(promisify(promisify(fn)), promisifedFn);
|
||||
}
|
||||
|
||||
{
|
||||
function fn() {}
|
||||
|
||||
function promisifiedFn() {}
|
||||
|
||||
// util.promisify.custom is a shared symbol which can be accessed
|
||||
// as `Symbol.for("nodejs.util.promisify.custom")`.
|
||||
const kCustomPromisifiedSymbol = Symbol.for('nodejs.util.promisify.custom');
|
||||
fn[kCustomPromisifiedSymbol] = promisifiedFn;
|
||||
|
||||
assert.strictEqual(kCustomPromisifiedSymbol, promisify.custom);
|
||||
assert.strictEqual(promisify(fn), promisifiedFn);
|
||||
assert.strictEqual(promisify(promisify(fn)), promisifiedFn);
|
||||
}
|
||||
|
||||
{
|
||||
function fn() {}
|
||||
fn[promisify.custom] = 42;
|
||||
|
Loading…
x
Reference in New Issue
Block a user