UNPKG

intkeygenerator

Version:

int secuential primarykey generator for SQL Server

67 lines (58 loc) 1.48 kB
var callbackRange; var blockSize = 20; var nextValue; var startValue; var queue = []; function setRangeReservationCallback (callback) { if (callbackRange && callbackRange != null) throw new Error('la funcion callback ya esta asignada.'); callbackRange = callback; } function getBlock (size, callback){ blockSize = size; callbackRange(size, function(err, value){ if (err) { callback(err, null); } else { nextValue = value; startValue = value; callback(err, value); } }); } function next (callback){ queue.push(callback); if (queue.length != 1) { return; } nextBody(); } function nextBody(){ if (isNaN(nextValue) || nextValue == null || startValue + blockSize == nextValue) { //console.log('start: ' + startValue + ', blockSize: ' + blockSize + ', nextValue: ' + nextValue); getBlock(blockSize, function(err, value){ if (err) { endNext(err, null); } else { nextValue++; endNext(null, nextValue); } }); } else { nextValue++; endNext(null, nextValue); } } function endNext(err, nextValue){ var cb = queue[0]; queue.splice(0, 1); cb(err, nextValue); if (queue.length != 0) nextBody(); } function reset(){ callbackRange = undefined; rangeSize = null; nextValue = null; rangeStart = null; } module.exports = {setRangeReservationCallback : setRangeReservationCallback, getBlock : getBlock, next : next, reset : reset, size : blockSize };