New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

auto-reset-event

Package Overview
Dependencies
Maintainers
1
Versions
11
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

auto-reset-event

An acquire-release one semantic implemented in Promise.

  • 1.0.0
  • latest
  • Source
  • npm
  • Socket score

Version published
Weekly downloads
7
decreased by-50%
Maintainers
1
Weekly downloads
 
Created
Source

auto-reset-event

This package mimic the behavior of AutoResetEvent of C#, an acquire-release one semantic.

Background

Although JavaScript is single-threaded, one might want to limit number of concurrent asynchronous operations. For example, a task that requires multiple asynchronous steps to complete can use this package to limit its concurrency.

How to use

Run npm install auto-reset-event.

Code snippets

import createAutoResetEvent from 'auto-reset-event';

// Create an acquire-release queue
const acquire = createAutoResetEvent();

// Acquire a single lock, this function will not be resolved until the lock is acquired
const release = await acquire();

// Do the non-parallelized asynchronous work

// Release the lock
release();

Full sample

import createAutoResetEvent from 'auto-reset-event';
import delay from 'delay';

async function main() {
  const acquire = createAutoResetEvent();

  await Promise.all([
    (async () => {
      const release = await acquire();

      console.log('You will see this first.');
      await delay(1000);

      release();
    })(),
    (async () => {
      const release = await acquire();

      console.log('You will see this after a second.');
      await delay(1000);

      release();
    })(),
  ]);

  console.log('You will see this last, after two seconds.');
}

main().catch(err => console.error(err));

Samples

auto-reset-event can be used to limit concurrency for asynchronous operations.

Slowing down web traffic for debugging purpose

We can use auto-reset-event to easily slow down concurrent requests by limiting its concurrency and serving rate. In this sample, we slowed down serving static content by serving one request every second.

import { createServer } from 'restify';
import createAutoResetEvent from 'auto-reset-event';
import delay from 'delay';
import serveHandler from 'serve-handler';

const server = createServer();
const acquireSlowLock = createAutoResetEvent();

server.get('/public/*', async (req, res) => {
  // If ?slow is added to the URL, we will slow it down by serving one request every second
  if ('slow' in req.query) {
    // Make sure it is not cached, so we can replay the slow behavior easily
    res.noCache();

    const release = await acquireSlowLock();

    await delay(1000);
    release();
  }

  await serveHandler(req, res, { path: join(__dirname, './public') });
});

server.listen(process.env.PORT || 80);

Contributions

Like us? Star us.

Want to make it better? File us an issue.

Don't like something you see? Submit a pull request.

Keywords

FAQs

Package last updated on 03 Oct 2018

Did you know?

Socket

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
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc