guarantee asynchronous execution for batch reads and write queues
This commit is contained in:
parent
fb50fe09ce
commit
1da662687f
2 changed files with 13 additions and 8 deletions
|
@ -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…
Reference in a new issue