typed-utilities
Version:
Strongly typed general purpose utilities
40 lines (36 loc) • 1.06 kB
JavaScript
;
var _ = require("..");
describe(`AsyncLock`, () => {
test(`use AsyncLock`, async () => {
const lock = new _.AsyncLock();
expect(lock.length).toEqual(0);
await lock.use(async () => {
expect(lock.length).toEqual(1);
});
expect(lock.length).toEqual(0);
let acquired = null;
const results = [];
const errors = [];
const join = (0, _.mapAsyncConcurrent)((0, _.range)(100), key => lock.use(async () => {
expect(acquired).toEqual(null);
acquired = key;
await (0, _.sleep)(0);
expect(acquired).toEqual(key);
acquired = null;
if (key % 2 === 0) {
return key;
}
throw new Error();
}).then(result => {
results.push(result);
}).catch(error => {
errors.push(error);
}));
expect(lock.length).toEqual(100);
await join;
expect(lock.length).toEqual(0);
expect(results).toEqual((0, _.range)(100).filter(key => key % 2 === 0));
expect(errors).toHaveLength(50);
});
});
//# sourceMappingURL=AsyncLock.test.js.map