Skip to content

Commit

Permalink
test: AsyncLocalStorage works with thenables
Browse files Browse the repository at this point in the history
This adds a test to verify that AsyncLocalStorage works with thenables.

PR-URL: nodejs#34008
Refs: nodejs#33778
Reviewed-By: Michaël Zasso <[email protected]>
Reviewed-By: Stephen Belanger <[email protected]>
Reviewed-By: James M Snell <[email protected]>
  • Loading branch information
Flarna committed Sep 23, 2020
1 parent 7182ee4 commit 227a637
Showing 1 changed file with 53 additions and 0 deletions.
53 changes: 53 additions & 0 deletions test/async-hooks/test-async-local-storage-thenable.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
'use strict';

const common = require('../common');

const assert = require('assert');
const { AsyncLocalStorage } = require('async_hooks');

// This test verifies that async local storage works with thenables

const store = new AsyncLocalStorage();
const data = Symbol('verifier');

const then = common.mustCall((cb) => {
assert.strictEqual(store.getStore(), data);
setImmediate(cb);
}, 4);

function thenable() {
return {
then
};
}

// Await a thenable
store.run(data, async () => {
assert.strictEqual(store.getStore(), data);
await thenable();
assert.strictEqual(store.getStore(), data);
});

// Returning a thenable in an async function
store.run(data, async () => {
try {
assert.strictEqual(store.getStore(), data);
return thenable();
} finally {
assert.strictEqual(store.getStore(), data);
}
});

// Resolving a thenable
store.run(data, () => {
assert.strictEqual(store.getStore(), data);
Promise.resolve(thenable());
assert.strictEqual(store.getStore(), data);
});

// Returning a thenable in a then handler
store.run(data, () => {
assert.strictEqual(store.getStore(), data);
Promise.resolve().then(() => thenable());
assert.strictEqual(store.getStore(), data);
});

0 comments on commit 227a637

Please sign in to comment.