Node.js while循环返回不同的结果

Node.js while循环返回不同的结果,node.js,function,while-loop,callback,Node.js,Function,While Loop,Callback,我想做的是,我有两个用户,一个是攻击者,一个是防御者。我希望调用hit()函数,直到其中一次生命耗尽,hit()应该依次调用,首先是攻击者,然后是防御者,然后是攻击者,依此类推,直到一次生命值达到0 我的想法是使用while循环,使用当前代码,我得到的只是来自hit()的console.log,这是一个无限循环。如果hit()中的数据不在循环中,则会正确返回该数据。。。我可以简单地在while循环中工作,不使用命中函数,但这意味着要重复很多代码,因为在实际命中之前会有一些事情要考虑。p> 如果你

我想做的是,我有两个用户,一个是攻击者,一个是防御者。我希望调用hit()函数,直到其中一次生命耗尽,hit()应该依次调用,首先是攻击者,然后是防御者,然后是攻击者,依此类推,直到一次生命值达到0

我的想法是使用while循环,使用当前代码,我得到的只是来自hit()的console.log,这是一个无限循环。如果hit()中的数据不在循环中,则会正确返回该数据。。。我可以简单地在while循环中工作,不使用命中函数,但这意味着要重复很多代码,因为在实际命中之前会有一些事情要考虑。p> 如果你有一个替代while循环的方法,我很乐意接受你的想法,我应该提到我是node的新手,所以请尽量简单。多谢各位

这是守则的相关部分:

var prepareAttack = function(attacker,defender) {
    connectdb().done(function(connection) {
        query(connection,'SELECT * FROM members WHERE name = ?', attacker).done(function(result) {
            var attackerData = result[0][0]
            query(connection,'SELECT * FROM members WHERE name = ?', defender).done(function(result) {
                var defenderData = result[0][0]
                var attackerHp = attackerData.hp
                var defenderHp = defenderData.hp
                while(attackerHp > 0 && defenderHp > 0) {
                    hit(attackerData,defenderData).done(function(result){
                        defenderHp = result;
                        console.log(defenderHp)
                    })
                    hit(defenderData, attackerData).done(function(result) {
                        attackerHp = result;
                        console.log(attackerHp)
                    })
                }

            })
        })
    })
}
var hit = function (attackerData, defenderData) { // simplified code just relevant parts inside.
    console.log('hitting')
    var defer = Q.defer()
    var newHp = 0;
    defer.resolve(newHp)
    return defer.promise

}

var defenderData=result[0][0]返回数据库查询的第一个结果行中的第一个值。如果这是序列化的json或对象,则需要反序列化。在任何情况下,defenderData.hp都是未定义的。attacherData.hp也是如此。我已经测试过了,找到了正确的号码。结果[0]包含所有返回的行,因此第一行是结果[0][0]var defenderData=result[0][0]返回数据库查询的第一个结果行中的第一个值。如果这是序列化的json或对象,则需要反序列化。在任何情况下,defenderData.hp都是未定义的。attacherData.hp也是如此。我已经测试过了,找到了正确的号码。结果[0]包含所有返回的行,因此第一行是结果[0][0]