不知道我的写法算不算递归。 最近在做游戏竞技场功能。大概需求就是竞技场按积分排名的,然后根据玩家当前的积分随机刷几条(5条吧)积分<=目标玩家的敌对玩家。我的写法如下:
var diff_value=100;//100积分为间隔值
var need_count=5;
var getLowerEnemyId = function (score,temp_min) {
var max = score,
min = score - diff_value;
if (!temp_min) min = temp_min;
return cache.zrevrangebyscore(key, max, min)
.then(function (val) {
//这里拿到max和min之间的数据,判断是否数量足够,假如数量不够,就继续减小min值
//即min再减100,然后调用函数本身
if(val.length<need_count){
min-=diff_value;
return getLowerEnemyId(id,score,min)
}
})
.then(function (val) {
//最后根据拿到的所有id查询对应id的详细数据
return getEnemyDetails(val);
});
};
然后我直接调用函数就可以拿到需要的数据:
getLowerEnemyId(100); //即拿5条积分<=100数据
现在的问题是,假如一次没拿够5条,getLowerEnemyId
这个函数在自身内部又调用了2次才拿够的话,那么最后我的getEnemyDetails
会被调用3次,如何避免呢? 这样的逻辑我应该怎么写?