代码场景大致如下。要从redis里获取一个结果集列表,获取的时候先判断是否存在缓存,如果没的话先设置缓存再调用。先贴下函数声明的代码。exports.totalRank=function(){vartrDeferred=Q.defer();Q.all([RedisDB.getDailyRankList(),RedisDB.getWeeklyRankList(),RedisDB.getMonthlyRankList()]).done(function(result){if(cacheExistsChecker(result)){varreturnResult={dailyRank:JSON.parse(result[0])[0].rank,weeklyRank:JSON.parse(result[1])[0].rank,monthlRank:JSON.parse(result[2])[0].rank,}trDeferred.resolve(returnResult);}else{CacheAction.setRanksLists().then(function(){RankAction.totalRank().then(function(result){trDeferred.resolve(result);})});}})returntrDeferred.promise;}调用该函数的代码如下:RankAction.totalRank().then(function(result){console.log(result);}).fail(function(err){console.log(err);});调用该方法时候,缓存不存在,所以肯定是进入了else的流程。现在疑惑就是:重点关注函数声明那段代码,else里面的RankAction.totalRank().then()里面的trDeferred,该对象是第一次调用就return了的promise对象,还是第一次判断缓存不存在,然后再重新调用totalRank时候重新var的trDeferred?个人的理解是第一次的trdeferred。因为如果这里不用RankAction.totalRank().then(xxxx),而是直接RankAction.totalRank(),则不返回结果。求分析解惑一下。
慕的地10843
慕莱坞森
相关分类