1. synchd
Make guarded sections of code that won't run concurrently and queue instead
synchd
Package: synchd
Created by: Macil
Last modified: Mon, 27 Jun 2022 03:12:23 GMT
Version: 1.1.0
License: MIT
Downloads: 6,825
Repository: https://github.com/Macil/synchd

Install

npm install synchd
yarn add synchd

synchd

GitHub license npm version CircleCI Status Greenkeeper badge

This module allows guarded sections of code to be made that execute exclusively
in the order they're called.

Similar to node-synchronized,
but uses Promises and includes Flow type declarations.

API

This project exports the synchd and synchdFn functions. If you're using an
ES6 compiler, you can access them like this:

 import {synchd, synchdFn} from 'synchd';

Or you can access the functions through the classic CommonJS style:

 var synchd = require('synchd');
// synchd.synchd(...)
// synchd.synchdFn(...)

synchd(scopeKey, fn)

scopeKey may be any object and it's used as the lock. No other synchd calls
with the same scopeKey given will be run at the same time; they will be queued
in-order to run after. fn is a function which takes no arguments and must
return a Promise.

This call returns a Promise that resolves to the same value that the Promise
returned by fn resolves to.

synchdFn(scopeKey, fn)

This is a convenience function for creating functions that are entirely wrapped
in a synchd call with a single scopeKey.

scopeKey has the same meaning as above. fn is a function that may take
arguments and must return a Promise.

This call returns a function with the same signature as fn. All arguments
passed to the function will be passed on to fn when it gets executed, and the
returned Promise will resolve to the value of the Promise that fn returns.

Here's an example of defining a single function which can't be running multiple
times concurrently. This example assumes you're using a compiler which supports
async/await.

 import {synchdFn} from 'synchd';
import delay from 'pdelay';

const exclusiveFunction = synchdFn({}, async (x) => {
  console.log(`exclusiveFunction(${x}) started`);
  await delay(100);
  console.log(`exclusiveFunction(${x}) ending`);
  return x+1;
});

exclusiveFunction(5);
exclusiveFunction(6);

// The following will be printed:
// exclusiveFunction(5) started
// exclusiveFunction(5) ending
// exclusiveFunction(6) started
// exclusiveFunction(6) ending

Types

Both TypeScript and
Flow type definitions for this module are included!
The type definitions won't require any configuration to use.

RELATED POST

10 Must-Know Windows Shortcuts That Will Save You Time

10 Must-Know Windows Shortcuts That Will Save You Time

Arrays vs Linked Lists: Which is Better for Memory Management in Data Structures?

Arrays vs Linked Lists: Which is Better for Memory Management in Data Structures?

Navigating AWS Networking: Essential Hacks for Smooth Operation

Navigating AWS Networking: Essential Hacks for Smooth Operation

Achieving Stunning Visuals with Unity's Global Illumination

Achieving Stunning Visuals with Unity's Global Illumination

Nim's Hidden Gems: Lesser-known Features for Writing Efficient Code

Nim's Hidden Gems: Lesser-known Features for Writing Efficient Code