From ba684805b6c0eded76e5cd89ee00328ac7a59365 Mon Sep 17 00:00:00 2001 From: ExE Boss <3889017+ExE-Boss@users.noreply.github.com> Date: Fri, 7 Feb 2020 11:40:00 +0100 Subject: [PATCH] =?UTF-8?q?util:=20use=C2=A0a=C2=A0global=C2=A0symbol=20fo?= =?UTF-8?q?r=C2=A0`util.promisify.custom`?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 Reviewed-By: Colin Ihrig Reviewed-By: Gus Caplan Reviewed-By: Ruben Bridgewater --- doc/api/util.md | 21 +++++++++++++++++++++ lib/internal/util.js | 2 +- test/parallel/test-util-promisify.js | 15 +++++++++++++++ 3 files changed, 37 insertions(+), 1 deletion(-) diff --git a/doc/api/util.md b/doc/api/util.md index 151e4769930280..2c0062eff7b62f 100644 --- a/doc/api/util.md +++ b/doc/api/util.md @@ -995,11 +995,32 @@ throw an error. ### `util.promisify.custom` * {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`