guarantee asynchronous execution for batch reads and write queues

pull/1/head
ansuz 5 years ago
parent fb50fe09ce
commit 1da662687f

@ -8,6 +8,8 @@ If the result of IO or computation is requested while an identical request
is already in progress, wait until the first one completes and provide its is already in progress, wait until the first one completes and provide its
result to every routine that requested it. result to every routine that requested it.
Asynchrony is guaranteed.
## Usage ## Usage
Provide: Provide:
@ -51,11 +53,12 @@ module.exports = function (/* task */) {
var args = Array.prototype.slice.call(arguments); var args = Array.prototype.slice.call(arguments);
//if (map[id] && map[id].length > 1) { console.log("BATCH-READ DID ITS JOB for [%s][%s]", task, id); } //if (map[id] && map[id].length > 1) { console.log("BATCH-READ DID ITS JOB for [%s][%s]", task, id); }
setTimeout(function () {
map[id].forEach(function (h) { map[id].forEach(function (h) {
h.apply(null, args); h.apply(null, args);
});
delete map[id];
}); });
delete map[id];
}); });
}; };
}; };

@ -4,7 +4,7 @@ q(id, function (next) {
// whatever you need to do.... // whatever you need to do....
// when you're done // when you're done
next(); next(); // guaranteed to be asynchronous :D
}); });
*/ */
@ -16,9 +16,11 @@ module.exports = function () {
var map = {}; var map = {};
var next = function (id) { var next = function (id) {
if (map[id] && map[id].length === 0) { return void delete map[id]; } setTimeout(function () {
var task = map[id].shift(); if (map[id] && map[id].length === 0) { return void delete map[id]; }
task(fix1(next, id)); var task = map[id].shift();
task(fix1(next, id));
});
}; };
return function (id, task) { return function (id, task) {

Loading…
Cancel
Save