Socket
Socket
Sign inDemoInstall

async-local-storage

Package Overview
Dependencies
1
Maintainers
1
Versions
10
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

    async-local-storage

Get the value like thread-local storage in threaded programming


Version published
Weekly downloads
4.2K
increased by3.94%
Maintainers
1
Install size
34.0 kB
Created
Weekly downloads
 

Readme

Source

async-local-storage

Build Status Coverage Status npm Github Releases

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.

API

const als = require('async-local-storage');
als.enable();
setTimeout(() => {
  als.scope();
  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

enable the async hooks

const als = require('async-local-storage');
als.enable();

disable

disable the async hooks

const als = require('async-local-storage');
als.enable();
setTimeout(() => {
  als.disable();
}, 100);

size

get the size of storage

const als = require('async-local-storage');
als.enable();
setTimeout(() => {
  console.info(als.size());
}, 100);

scope

change the scope of call chain, it will be the call chain top (remove the parent of itself)

const als = require('async-local-storage');
const Koa = require('koa');
const assert = require('assert');

const app = new Koa();
app.use(async (ctx, next) => {
  const id = ctx.get('X-Request-Id');
  als.scope();
  als.set('id', id);
  await next();
});

app.use(async (ctx, next) => {
  const id = ctx.get('X-Request-Id');
  assert.equal(als.get('id'), id);
  await next();
});

app.use((ctx) => {
  ctx.body = 'OK';
});

set

set the value by key for the current id

  • key the key
  • value the value
  • linkedTop set the value linked to top
als.enable()
setTimeout(() => {
  als.scope();
  const id = randomBytes();
  setTimeout(() => {
    als.set('id', id, true);
  }, 1);
  setTimeout(() => {
    assert.equal(als.get('id'), id);
  }, 10);
}, 10);

get

get the value by key, if will find from parent, self --> parent --> parent, until the value is not undefined

  • key the key
als.enable();
setTimeout(() => {
  als.scope();
  const id = randomBytes();
  setTimeout(() => {
    als.set('id', id, true);
  }, 1);
  setTimeout(() => {
    assert.equal(als.get('id'), id);
  }, 10);
}, 10);

enableLinkedTop

enable linked top for default (default is disabled)

als.enable();
als.enableLinkedTop();
setTimeout(() => {
  als.scope();
  setTimeout(() => {
    // the same as als.set('id', 'a', true)
    als.set('id', 'a');
  }, 10);
}, 10);

disableLinkedTop

disable linked top for default

als.enable();
als.enableLinkedTop();
setTimeout(() => {
  als.disableLinkedTop();
  als.scope();
  setTimeout(() => {
    // the same as als.set('id', 'a', false)
    als.set('id', 'a');
  }, 10);
}, 10);

currentId

get the current id

const assert = require('assert');
als.enable();
setTimeout(() => {
  console.info(als.currentId());
}, 10);

use

get the use time of id

  • id The tigger id, default is als.currentId()
als.enable()
setTimeout(() => {
  const id = als.currentId();
  console.info(als.use(id));
}, 10);

enableCreateTime

enable create time of data, default is enabled.

als.enableCreateTime();

disableCreateTime

disable create time of data, it can save memory.

als.disableCreateTime();

Keywords

FAQs

Last updated on 08 Jun 2019

Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc