mutex-js
Provides a promise-based mechanism for locking around code which requires synchronization
(i.e. you may want to synchronize functions that span multiple iterations of the event loop).
Install
npm install --save mutex-js
Getting started
const Mutex = requires('mutex-js');
const mutex = new Mutex();
mutex.lock(() => {...});
Example
Below, we call an async function run
several times with different args (the calls will run in parallel).
The function reads data from a file, appends the input to the data and finally writes the modified data back to the file.
Without synchronization, each call to run
may overlap the results of the previous one.
Wrapping the function implementation in a locking mechanism ensures that only one call is executing the critical section at a time.
const mutex = new Mutex();
const readFromFile = () => {...}
const appendData = (data, arg) => {...}
const writeToFile = (data) => {...}
const run = (arg) =>
mutex.lock(
readFromFile()
.then(data => appendData(data, arg))
.then(writeToFile)
);
Promise.all([
run('foo'),
run('bar')
])
.then(...)
.catch(...)