我有一些代码,我已经设置了一个事件监听器。事件监听器看起来像这样:
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;
}
答案 0 :(得分:0)
代码实际上是半工作而不是一半。
实际上发送了10条消息。由于其他服务器相关问题,前5个会失败,第二个5会成功。我不知道为什么我的console.log
之前没有透露过。
修复程序很简单try/catch
。