mirror of
https://github.com/nodejs/node.git
synced 2024-11-21 10:59:27 +00:00
a2b1b92e30
This adds a test to verify that AsyncLocalStorage works with thenables. PR-URL: https://github.com/nodejs/node/pull/34008 Refs: https://github.com/nodejs/node/pull/33778 Reviewed-By: Michaël Zasso <targos@protonmail.com> Reviewed-By: Stephen Belanger <admin@stephenbelanger.com> Reviewed-By: James M Snell <jasnell@gmail.com>
54 lines
1.2 KiB
JavaScript
54 lines
1.2 KiB
JavaScript
'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);
|
|
});
|