为什么我不能在闭包中访问局部variables

我有以下代码。 我将一些数据保存在并行的callback中的cachingvariables中,但在并行内部,caching对象总是空的。 有任何想法吗?

Topics.getTopicsByTids = function(tids, uid, callback) { var cache = {}; function loadTopicInfo(topicData, next) { async.parallel({ privileges: function(next) { console.log(cache); // always prints empty object if (cache[topicData.cid]) { console.log('CACHE'); return next(null, cache[topicData.cid]) } categoryTools.privileges(topicData.cid, uid, next); } }, function(err, topicInfo) { // save privs to cache, doesnt seem to modify //the cache object in the outer scope cache[topicData.cid] = topicInfo.privileges; console.log(cache); // prints out the cached data next(null, topicData); }); } Topics.getTopicsData(tids, function(err, topics) { async.map(topics, loadTopicInfo, callback); }); }; 

问题是async.map它并行地调用了20个主题的loadTopicInfo 。 所以caching检查是在caching中保存任何内容之前进行的。 DUH! 用async.eachSeriesreplace它解决了这个问题。