Mutex locks for async functions and delegating generator functions
const lock = new AwaitLock();
async function runSerialTaskAsync() {
await lock.acquire();
try {
// Run async code in the critical section
} finally {
lock.release();
}
}
You can also use AwaitLock with co and generator functions.
const runSerialTaskAsync = co.wrap(function*() {
yield lock.acquire();
try {
// IMPORTANT: Do not return a promise from here because the finally clause
// may run before the promise settles, and the catch clause will not run if
// the promise is rejected
} finally {
lock.release();
}
});