mirror of
https://github.com/nodejs/node.git
synced 2024-11-27 22:16:50 +01:00
cf46746b8a
PR-URL: https://github.com/nodejs/node/pull/45549 Reviewed-By: Daeyeon Jeong <daeyeon.dev@gmail.com> Reviewed-By: Rich Trott <rtrott@gmail.com> Reviewed-By: Moshe Atlow <moshe@atlow.co.il> Reviewed-By: Darshan Sen <raisinten@gmail.com> Reviewed-By: Yagiz Nizipli <yagiz@nizipli.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);
|
|
});
|