await-lock
Version:
Mutex locks for async functions
43 lines (32 loc) • 1.3 kB
Markdown
Mutex locks for async functions
[](https://github.com/ide/await-lock/wiki/API-documentation)
This package is published only as an ES module. In addition to importing ES modules from ES modules, modern versions of Node.js support [requiring ES modules from CommonJS modules](https://nodejs.org/api/modules.html#loading-ecmascript-modules-using-require).
```javascript
import AwaitLock from 'await-lock';
let lock = new AwaitLock();
async function runSerialTaskAsync() {
await lock.acquireAsync();
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();
}
}
```
You can also use AwaitLock with [co](https://github.com/tj/co) and generator functions.
```javascript
import AwaitLock from 'await-lock';
let runSerialTaskAsync = co.wrap(function*() {
yield lock.acquireAsync();
try {
// Run async code in the critical section
} finally {
lock.release();
}
});
```