I want something like thread-local
storage in threaded programming and async_hooks
is usable in node.js 8.0
, so there is an easy way to use thread-local
.
const als = require('async-local-storage');
als.enable();
setTimeout(() => {
const id = randomBytes(8);
als.set('id', id);
delay().then(() => {
assert.equal(als.get('id'), id);
return readfilePromise(__filename);
}).then(() => {
assert.equal(als.get('id'), id);
return superagent.get('http://www.baidu.com/');
}).then(() => {
assert.equal(als.get('id'), id);
});
}, 100);
enable the async hooks
const als = require('async-local-storage');
als.enable();
disable the async hooks
const als = require('async-local-storage');
als.enable();
setTimeout(() => {
als.disable();
}, 100);
get the size of storage
const als = require('async-local-storage');
als.enable();
setTimeout(() => {
console.info(als.size());
}, 100);
set the value by key for the current id
key
the keyvalue
the valuelinkedTop
set the value linked to top
const assert = require('assert');
const als = require('async-local-storage');
const crypto = require('crypto');
const randomBytes = length => crypto.randomBytes(length).toString('hex')
als.enable()
setTimeout(() => {
const id = randomBytes(8);
als.set('id', id);
const check = (times, id, subId) => {
assert.equal(als.get('id'), id);
assert.equal(als.get('subId'), subId);
if (times < 0) {
done();
} else {
setTimeout(() => {
check(times - 1, id, subId);
}, 10);
}
};
setTimeout(() => {
const subId = randomBytes(8);
als.set('subId', subId);
assert.equal(als.get('id'), id);
check(3, id, subId);
}, 10);
}, 10);
get the value by key, if will find from parent, self --> parent --> parent, until the value is not undefined
key
the key
const assert = require('assert');
const als = require('async-local-storage');
const crypto = require('crypto');
const randomBytes = length => crypto.randomBytes(length).toString('hex')
als.enable()
setTimeout(() => {
const id = randomBytes(8);
als.set('id', id);
const check = (times, id, subId) => {
assert.equal(als.get('id'), id);
assert.equal(als.get('subId'), subId);
if (times < 0) {
done();
} else {
setTimeout(() => {
check(times - 1, id, subId);
}, 10);
}
};
setTimeout(() => {
const subId = randomBytes(8);
als.set('subId', subId);
assert.equal(als.get('id'), id);
check(3, id, subId);
}, 10);
}, 10);
Get the current id
const assert = require('assert');
const als = require('async-local-storage');
als.enable();
setTimeout(() => {
assert(als.currentId());
}, 10);
id
The tigger id, default isals.currentId()
const assert = require('assert');
const als = require('async-local-storage');
als.enable();
setTimeout(() => {
assert(als.use());
}, 10);
Enable all value linked to top
Disable all value linked to top
MIT