Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions doc/api/async_context.md
Original file line number Diff line number Diff line change
Expand Up @@ -446,6 +446,9 @@ added:
- v14.8.0
- v12.19.0
changes:
- version: REPLACEME
pr-url: https://github.com/nodejs/node/pull/42177
description: Changed the default when `thisArg` is not provided to use `this` from the caller.
Comment thread
aduh95 marked this conversation as resolved.
Outdated
- version: v16.0.0
pr-url: https://github.com/nodejs/node/pull/36782
description: Added optional thisArg.
Expand All @@ -468,6 +471,9 @@ added:
- v14.8.0
- v12.19.0
changes:
- version: REPLACEME
pr-url: https://github.com/nodejs/node/pull/42177
description: Changed the default when `thisArg` is not provided to use `this` from the caller.
Comment thread
aduh95 marked this conversation as resolved.
Outdated
- version: v16.0.0
pr-url: https://github.com/nodejs/node/pull/36782
description: Added optional thisArg.
Expand Down
21 changes: 12 additions & 9 deletions lib/async_hooks.js
Original file line number Diff line number Diff line change
Expand Up @@ -223,15 +223,18 @@ class AsyncResource {
return this[trigger_async_id_symbol];
}

bind(fn, thisArg = this) {
bind(fn, thisArg) {
validateFunction(fn, 'fn');
const ret =
FunctionPrototypeBind(
this.runInAsyncScope,
this,
fn,
thisArg);
ObjectDefineProperties(ret, {
const runInAsyncScope = FunctionPrototypeBind(
this.runInAsyncScope,
this,
fn);
function bound(...args) {
return runInAsyncScope(
thisArg !== undefined ? thisArg : this,
...args);
Comment thread
aduh95 marked this conversation as resolved.
Outdated
}
ObjectDefineProperties(bound, {
'length': {
configurable: true,
enumerable: false,
Expand All @@ -245,7 +248,7 @@ class AsyncResource {
writable: true,
}
});
return ret;
return bound;
}

static bind(fn, type, thisArg) {
Expand Down
7 changes: 6 additions & 1 deletion test/parallel/test-asyncresource-bind.js
Original file line number Diff line number Diff line change
Expand Up @@ -41,11 +41,16 @@ const fn3 = asyncResource.bind(common.mustCall(function() {
fn3();

const fn4 = asyncResource.bind(common.mustCall(function() {
assert.strictEqual(this, asyncResource);
assert.strictEqual(this, undefined);
}));
fn4();

const fn5 = asyncResource.bind(common.mustCall(function() {
assert.strictEqual(this, false);
}), false);
fn5();

const fn6 = asyncResource.bind(common.mustCall(function() {
assert.strictEqual(this, 'test');
}));
fn6.call('test');