123456789101112131415161718192021222324 |
- module.exports.create = function (resourceCount) {
- var queue = [];
- var returnAfter = function (func) {
- var called = 0;
- return function () {
- if (called++) { throw new Error("Function called multiple times"); }
- if (func) { func.apply(null, arguments); }
- resourceCount++;
- check();
- };
- };
- var check = function () {
- if (resourceCount < 0) { throw new Error("(resourceCount < 0) should never happen"); }
- if (resourceCount === 0 || queue.length === 0) { return; }
- resourceCount--;
- queue.shift()(returnAfter);
- };
- return {
- take: function (func) {
- queue.push(func);
- check();
- }
- };
- };
|