Browse Source

Add multi-caching promise support for Wrap

feature/remove-domains
Jonathan 9 years ago
parent
commit
b92743fb87
  1. 18
      lib/multi_caching.js
  2. 64
      test/multi_caching.unit.js

18
lib/multi_caching.js

@ -145,6 +145,17 @@ var multiCaching = function(caches, options) {
};
}
if (!cb) {
cb = Promise.defer();
var work2 = work;
work = function(cb) {
Promise.resolve().then(work2).then(function(res) {
cb(null, res);
})
.catch(cb);
};
}
var hasKey = callbackFiller.has(key);
callbackFiller.add(key, {cb: cb, domain: process.domain});
if (hasKey) { return; }
@ -175,6 +186,9 @@ var multiCaching = function(caches, options) {
}
if (!self._isCacheableValue(data)) {
if (typeof cb === 'object') {
return cb.resolve(data);
}
return cb();
}
@ -186,6 +200,10 @@ var multiCaching = function(caches, options) {
});
}
});
if (typeof cb === 'object') {
return cb.promise;
}
};
/**

64
test/multi_caching.unit.js

@ -970,6 +970,70 @@ describe("multiCaching", function() {
});
});
});
describe("using native promises", function() {
beforeEach(function() {
multiCache = multiCaching([memoryCache, memoryCache3]);
});
it("should be able to chain with simple promise", function(done) {
multiCache.wrap('key', function() {
return 'OK';
})
.then(function(res) {
assert.equal(res, 'OK');
done();
});
});
it("should be able to chain with cache function as a promise", function(done) {
multiCache.wrap('key', function() {
return new Promise(function(resolve) {
resolve('OK');
});
})
.then(function(res) {
assert.equal(res, 'OK');
done();
});
});
it("should be able to catch errors in cache function as a promise", function(done) {
multiCache.wrap('key', function() {
return new Promise(function(resolve, reject) {
reject('NOK');
});
})
.then(function() {
done(new Error('It should not call then since there is an error in the cache function!'));
})
.catch(function() {
done();
});
});
it("should be able to catch a throw in cache function as a promise", function(done) {
multiCache.wrap('key', function() {
throw 'NOK';
})
.then(function() {
done(new Error('It should not call then since there is an error in the cache function!'));
})
.catch(function() {
done();
});
});
it("should be able to chain with non-cacheable value", function(done) {
multiCache.wrap('key', function() {
return;
})
.then(function(res) {
assert.equal(res, undefined);
done();
});
});
});
});
context("when instantiated with a non-Array 'caches' arg", function() {

Loading…
Cancel
Save