Я пишу код для node.js, используя драйвер node-mongodb.Я решил кэшировать объекты коллекции, когда получаю их следующим образом:
var db = connectionObject;
function getCollection(collectionName) {
return function(callback) {
var cache;
if (cache) return callback(null, cache);
db.collection(collectionName, function(err, collection) {
return err ? callback(err) : callback(null, cache = collection);
});
}
}
var usersCollection = getCollection('users');
usersCollection(function(err, collection) {
collection.find({}); // Rest of code here ...
});
Повторные вызовы функции usersCollection должны использовать объект кэшированной коллекции, за исключением того, что это не так - переменная кэша всегда неопределена.Изменение кода на это устраняет проблему:
return function(callback) {
var cache = arguments.callee;
if (cache.cached) return callback(null, cache.cached);
db.collection(collectionName, function(err, collection) {
return err ? callback(err) : callback(null, cache.cached = collection);
});
}
Я все еще не понимаю, почему переменная 'cache' выходит из области видимости.Что я делаю не так?