Browse Source

Capture work function exceptions and fill callbacks accordingly

feature/nested-cache-fetch-fix
Alejandro Torrado 10 years ago
parent
commit
812c353a42
  1. 15
      lib/caching.js
  2. 20
      lib/multi_caching.js

15
lib/caching.js

@ -1,4 +1,6 @@
/*jshint maxcomplexity:15*/
var domain = require('domain');
var caching = function (args) {
args = args || {};
var self = {};
@ -47,8 +49,8 @@ var caching = function (args) {
self.queues[key] = [cb];
function fillCallbacks(err, data) {
self.queues[key].forEach(function(f) {
function fillCallbacks(err, data){
self.queues[key].forEach(function(f){
f(err, data);
});
delete self.queues[key];
@ -60,7 +62,12 @@ var caching = function (args) {
} else if (result) {
fillCallbacks(null, result);
} else {
work(function (err, data) {
domain
.create()
.on('error', function(err){
fillCallbacks(err);
})
.bind(work)(function (err, data) {
if (err) {
fillCallbacks(err);
return;
@ -69,7 +76,7 @@ var caching = function (args) {
if (err && (!self.ignoreCacheErrors)) {
fillCallbacks(err);
} else {
fillCallbacks(null, data);
fillCallbacks(err, data);
}
});
});

20
lib/multi_caching.js

@ -1,4 +1,5 @@
var async = require('async');
var domain = require('domain');
/**
* Module that lets you specify a hierarchy of caches.
@ -54,8 +55,8 @@ var multi_caching = function (caches) {
self.queues[key] = [cb];
function fillCallbacks(err, data) {
self.queues[key].forEach(function(f) {
function fillCallbacks(err, data){
self.queues[key].forEach(function(f){
f(err, data);
});
delete self.queues[key];
@ -75,9 +76,14 @@ var multi_caching = function (caches) {
fillCallbacks(err, result);
});
} else {
work(function (err, data) {
domain
.create()
.on('error', function(err){
fillCallbacks(err);
})
.bind(work)(function (err, data) {
if (err) {
fillCallbacks(err, null);
fillCallbacks(err, data);
return;
}
var opts = {
@ -86,11 +92,7 @@ var multi_caching = function (caches) {
ttl: ttl
};
set_in_multiple_caches(caches, opts, function (err) {
if (err) {
fillCallbacks(err);
} else {
fillCallbacks(null, data);
}
fillCallbacks(null, data);
});
});
}

Loading…
Cancel
Save