【发布时间】:2018-06-12 21:52:01
【问题描述】:
我已经被这个问题困扰了一段时间了。我正在调用一个 API - 得到的结果就好了。我将值保存到数组中。我遇到的问题是尝试从数组中获取特定值。我有一个 for in 循环运行需要时间,所以当 if 语句运行时,循环还没有达到那个值。如果我使用 Postman,我会看到该值存在,只是循环没有及时执行。这是我的代码:
var msg = {};
var embed = {};
var link = {};
var msgIn = [];
var rel = [];
return SkypeService.getEvent(msg).then(function (result) {
msg.eventsNext = result._links.next.href;
if (result && result.sender && result.sender.length > 0) {
if (result.sender) {
for (var item in result.sender) {
var event = result.sender[item].events;
for (var key in event) {
embed = event[key]._embedded;
msgIn.push(embed);
}
for (var key in event) {
link = event[key].link;
rel.push(link);
}
// console.log(Object.entries(msgIn))
if(rel['rel'] == 'message') {
console.log("message is there")
if(msgIn.message) {
console.log("links exist")
if(msgIn.message.direction == "Incoming") {
console.log("direction is there")
msg.participant = msgIn.message._links.participant.href;
msg.contMsg = msgIn.message._links.messaging.href;
msg.msgIn = msgIn.message._links.plainMessage.href;
break;
}
}
}
if(rel['rel'] == "messagingInvitation"){
console.log("invite there")
if(msgIn.messagingInvitation && msgIn.messagingInvitation.state !== "Failed") {
console.log("invite link")
if(msgIn.messagingInvitation.direction == "incoming") {
console.log("direction invite")
msg.msgInviteState = msgIn.messagingInvitation._links.state;
msg.acceptInvite = msgIn.messagingInvitation._links['accept'].href;
msg.msgIn = msgIn.messagingInvitation._links.message.href;
break;
}
}
}
if(rel['rel'] == 'messaging') {
console.log('messaging there')
if(msgIn.messaging) {
if(msgIn.messaging.state == "Disconnected") {
console.log("msgn Disconnected")
msg.addMsg = msgIn.messaging._links.addMessaging.href;
break;
}
}
}
}
}
}
console.log(msg)
})
另外,我附上了我的本地主机的屏幕截图,该屏幕打印了显示密钥存在的 msgIn。
当我测试运行sails lift 的代码时,我可以看到msgIn 打印了几次,每次都在增加长度。这就是让我认为 if 语句运行时 for 循环尚未完成的原因。
请帮忙 - 我真的需要解决这个问题。我需要捕获这些链接,以便在下一步中使用它们。
谢谢。
【问题讨论】:
-
循环后面有 3 个 if 语句,你指的是哪一个?
-
您需要将其简化为一个更小的示例。只是在这里粘贴一些代码并要求其他人调试它是不太正确的。尝试为您试图了解如何解决的问题制定一个不太具体的示例。
-
您是否尝试过将 for 语句放在第一个 .then() 块中,然后将 if 语句放在下一个 .then 块中?
-
对你为什么要在第一个 if 中检查 result.sender 感到困惑,然后在下一行立即再次检查。我会将其重写为嵌套 for...in 循环以外的其他内容。但也许这只是我。
-
@Chibuzo 理想情况下都是 3 个。但是 if(rel['rel'] == 'message') 是最感兴趣的一个。问题是它有时会捕获这些值 - 但即使它存在,也不是一直捕获。
标签: javascript node.js loops sails.js