js递归问题(含Promise)
发布于 8 年前 作者 im-here 3606 次浏览 来自 问答

不知道我的写法算不算递归。 最近在做游戏竞技场功能。大概需求就是竞技场按积分排名的,然后根据玩家当前的积分随机刷几条(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次,如何避免呢? 这样的逻辑我应该怎么写?

2 回复

这。。。。。

加个 isdone 变量,保证 getEnemyDetails 只调用一次不就好了吗。。。。

或者把这一段

.then(function (val) {
			//最后根据拿到的所有id查询对应id的详细数据
            return getEnemyDetails(val);
        });

抽到外面来

回到顶部