The nr value given to Sema() does not stop .release() from being called as many times as a user wants.
Example below shows an nr value of 1, but the user is able to obtain 2 concurrent uses.
const Sema = require("async-sema").Sema;
let i = 0;
const a = new Sema(1);
a.release();
a.acquire().then(() => {
i++;
console.log(`i = ${i}`);
return a.acquire();
}).then(() => {
i++;
console.log(`i = ${i}`);
return a.acquire();
});