事件监听器无法从另一个函数读取正确的返回值

时间:2015-08-13 23:25:56

标签: javascript events

我有一些代码,我已经设置了一个事件监听器。事件监听器看起来像这样:

api.setListener(function(message) {
    myFunction(message);
});

这显然不是实际的代码,但它的想法是一样的。

每次api从服务器收到消息时,都会调用/运行此事件侦听器。收到邮件后,api会拨打myFunction并向其传递邮件。

myFunction看起来像这样:

function myFunction(message) {
    var otherStuff = getOtherStuff(message.name);

    if(otherStuff.isGood) {
        ...
    }
}

checkGoodness函数是一个函数,它根据传递给它的消息名称,搜索一个对象,并返回该对象的密钥,具有相同的.name属性。

getOtherStuff函数如下所示:

function getOtherStuff(name) {
    for(var thing in obj) {
        if(obj.hasOwnProperty(thing)) {
            if(obj[thing].name === name) {
                return obj[thing];
            }
        }
    }
    return null;
}

现在问题出现在这里:即使名称可能存在于obj的属性中,此函数总是返回null

但这非常令人困惑。我已经设置了许多console.log来记录...

  • obj

  • obj[thing]

  • name,以确保正确传递。

  • 如果条件通过并且return obj[thing]即将运行,则
  • “正常”。

  • “不好”如果没有通过,return null即将开始运作。

一切看起来都符合预期:obj并且它的属性正确,name正确传递,"good"打印,"bad"不是:一切似乎都很完美

但是,当我在console.log中插入myFunction以检查getOtherStuff的返回时,我得到null

造成这种情况的原因是什么?为什么?是否与我预测的事件有关?

如果我的伪代码不完全准确,这是实际的代码:

function findZone(id) {
    var zoneGroups = [playerInfos.user.zones, playerInfos.opponent.zones];

    for(var i = 0, length = zoneGroups.length; i < length; i++) {
        for(var zone in zoneGroups[i]) {
            if(zoneGroups[i].hasOwnProperty(zone)) {
                console.log(zoneGroups[i][zone].id, id, zoneGroups[i][zone].id === id);
                if(zoneGroups[i][zone].id === id) {
                    return zoneGroups[i][zone];
                }
            }
        }
    }
    return null;
}

1 个答案:

答案 0 :(得分:0)

代码实际上是半工作而不是一半。

实际上发送了10条消息。由于其他服务器相关问题,前5个会失败,第二个5会成功。我不知道为什么我的console.log之前没有透露过。

修复程序很简单try/catch