Browse Source

Fixing parallel wrapped function calls - issue #8

parallel-requests-fix
Bryan Donovan 11 years ago
parent
commit
cf442ab47d
  1. 10
      lib/caching.js
  2. 16
      test/caching.unit.js

10
lib/caching.js

@ -37,9 +37,9 @@ var caching = function (args) {
self.wrap = function (key, work, cb) {
self.store.get(key, function (err, result) {
if (err && (!self.ignoreCacheErrors)) {
cb(err, result);
cb(err);
} else if (result) {
cb(null, result);
cb.apply(null, result);
} else if (self.queues[key]) {
self.queues[key].push(cb);
} else {
@ -50,15 +50,13 @@ var caching = function (args) {
if (work_args[0]) { // assume first arg is an error
return cb(work_args[0]);
}
self.store.set(key, work_args[1], function (err) {
self.store.set(key, work_args, function (err) {
if (err && (!self.ignoreCacheErrors)) {
return cb(err);
}
self.queues[key].forEach(function (done) {
console.log(done.toString());
console.log(work_args[1]);
done.apply(null, [work_args[1]]);
done.apply(null, work_args);
});
delete self.queues[key];

16
test/caching.unit.js

@ -262,7 +262,7 @@ describe("caching", function () {
memory_store_stub.get.restore();
});
it("retrieves data from memory when available", function (done) {
it("retrieves data from cache", function (done) {
var func_called = false;
cache.wrap(key, function (cb) {
@ -421,24 +421,26 @@ describe("caching", function () {
construct = sinon.spy(function (val, cb) {
var timeout = support.random.number(100);
setTimeout(function () {
console.log("val: " + val);
cb(null, 'value');
}, timeout);
});
});
it.only("calls the wrapped function once", function (done) {
it("calls the wrapped function once", function (done) {
var values = [];
for (var i = 0; i < 20; i++) {
for (var i = 0; i < 2; i++) {
values.push(i);
}
async.each(values, function (val, async_cb) {
cache.wrap('key', function (cb) {
construct(val, cb);
}, async_cb);
}, function (err, result) {
assert.equal(result, 'value');
}, function (err, result) {
assert.equal(result, 'value');
async_cb(err);
});
}, function (err) {
check_err(err);
assert.equal(construct.callCount, 1);
done();
});

Loading…
Cancel
Save