Цикл Javascript не завершен до запуска оператора - PullRequest
0 голосов
/ 13 июня 2018

Я застрял в этом вопросе в течение некоторого времени.Я звоню через 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, который показывает, что ключи существуют.msgIn

Когда я тестирую код запуска паруса, я вижу, что msgIn печатает пару раз, каждый из которых увеличивается в длине.Это то, что заставляет меня думать, что цикл for еще не завершен к тому времени, когда выполняется оператор if.

Пожалуйста, помогите - мне действительно нужно, чтобы это было решено.Мне нужно захватить ссылки, чтобы я мог использовать их на следующем шаге.

Спасибо.

1 Ответ

0 голосов
/ 14 июня 2018

Я решил свою проблему, внеся изменения в код.Вот новая версия:

     return 
     SkypeService.getEvent(msg).then(function 
     (result) {
            msg.eventsNext = result._links.next.href;

            if (result.sender) {                                            
                for (var item in result.sender) {
                    var event = result.sender[item].events;                        
                    for (var key in event) {                                
                        embed = event[key]._embedded;
                        link = event[key].link;                          
                    };

                    if(link['rel'] == 'message') {
                        console.log("message is there")
                        if(embed.message) {
                            console.log("links exist")
                            if(embed.message.direction == "Incoming") {
                                console.log("direction is there")
                                msg.participant = embed.message._links.participant.href;
                                msg.contMsg = embed.message._links.messaging.href;
                                msg.msgIn = embed.message._links.plainMessage.href;
                                break;
                            }
                        }
                    };

                    if(link['rel'] == "messagingInvitation"){
                        console.log("invite there")
                        if(embed.messagingInvitation) {
                            console.log("invite link") 
                            if(embed.messagingInvitation.direction == "incoming") {
                                console.log("direction invite")
                                msg.msgInviteState = embed.messagingInvitation._links.state;
                                msg.acceptInvite = embed.messagingInvitation._links['accept'].href;
                                msg.msgIn = embed.messagingInvitation._links.message.href;
                                break;
                            }                                   
                        }
                    };

                    if(link['rel'] == 'messaging') {
                        console.log('messaging there')
                        if(embed.messaging) {
                            if(embed.messaging.state == "Disconnected") {
                                console.log("msgn Disconnected")
                                msg.addMsg = embed.messaging._links.addMessaging.href;
                                break;
                            }
                        }
                    };
                    console.log(msg)                                              
                };                  
            };               
        });

Я удалил проверку результата и упростил for (ключ var в событии) для обработки обеих операций в одной.Кроме того, я удалил массивы, в которые я помещал значения, поскольку я не использовал это.Возможно, это был трудоемкий фактор, который мешал мне проверить направление.

...