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);
|
||
|
});
|