diff --git a/doc/api/async_context.md b/doc/api/async_context.md index 51092f25dcfccf..9873e39b77ddb5 100644 --- a/doc/api/async_context.md +++ b/doc/api/async_context.md @@ -466,6 +466,11 @@ added: - v14.8.0 - v12.19.0 changes: + - version: REPLACEME + pr-url: https://github.com/nodejs/node/pull/46432 + description: The `asyncResource` property added to the bound function + has been deprecated and will be removed in a future + version. - version: - v17.8.0 - v16.15.0 @@ -484,9 +489,6 @@ changes: Binds the given function to the current execution context. -The returned function will have an `asyncResource` property referencing -the `AsyncResource` to which the function is bound. - ### `asyncResource.bind(fn[, thisArg])` + +Type: Runtime + +In a future version of Node.js, the `asyncResource` property will no longer +be added when a function is bound to an `AsyncResource`. + [NIST SP 800-38D]: https://nvlpubs.nist.gov/nistpubs/Legacy/SP/nistspecialpublication800-38d.pdf [RFC 6066]: https://tools.ietf.org/html/rfc6066#section-3 [RFC 8247 Section 2.4]: https://www.rfc-editor.org/rfc/rfc8247#section-2.4 diff --git a/lib/async_hooks.js b/lib/async_hooks.js index bf76874ffe2c1b..4ec54942d4f87f 100644 --- a/lib/async_hooks.js +++ b/lib/async_hooks.js @@ -20,7 +20,10 @@ const { ERR_ASYNC_TYPE, ERR_INVALID_ASYNC_ID } = require('internal/errors').codes; -const { kEmptyObject } = require('internal/util'); +const { + deprecate, + kEmptyObject, +} = require('internal/util'); const { validateFunction, validateObject, @@ -238,6 +241,7 @@ class AsyncResource { } else { bound = FunctionPrototypeBind(this.runInAsyncScope, this, fn, thisArg); } + let self = this; ObjectDefineProperties(bound, { 'length': { __proto__: null, @@ -250,8 +254,12 @@ class AsyncResource { __proto__: null, configurable: true, enumerable: true, - value: this, - writable: true, + get: deprecate(function() { + return self; + }, 'The asyncResource property on bound functions is deprecated', 'DEP0172'), + set: deprecate(function(val) { + self = val; + }, 'The asyncResource property on bound functions is deprecated', 'DEP0172'), } }); return bound;