@Alecxandrys

Почему происходит двойной вызов функции?

День добрый,
Существует данный вызов к методу на сервере
Meteor.call('ActionOn',{
                deck:game.chosenCardId.deck,
                index:game.chosenCardId.index
            },{
                deck:model.deck,
                index:model.index
            },state.type,false,function(error,result)
            {
                if(!error)
                {
                    if(result)
                    {
                        log.push(result);
                        if(result == "Success")
                        {
                            log.push("Model successfully action");
                        }
                    }
                    else
                    {
                        log.push("Status of shooting unknown");
                    }
                }
                else if(error.error == "battle_exist_error")
                {
                    log.push("ID check unsuccesfull");
                }
                else if(error.error == 'order_error')
                {
                    log.push("This model can't turning now, because another have priority");
                }
                else if(error.error == 'immovable')
                {
                    log.push("Model is immovable");
                }
                else if(error.error == 'type_unidentified')
                {
                    log.push("This type of action isn't supported");
                }
                else
                {
                    log.push("Unidentified error rise from server");
                }
                _logDep.changed();
                _turnDep.changed();
            });

Соответственно на стороне сервера описан Meteor.methods с соответствующим именем и параметрами.
Проблема в том, что по каким то причинам метод вызывается дважды, последовательно.
В большинстве ситуации это приводит к тому, что после правильной отработки в первый раз второй раз превращает результат в кашу.
В чем причина такого поведения и как решить проблему?

UPD: Стек вызовов тянется именно от этого Meteor.call(), набор параметров тот же.
Так же callback, который должен отработать, реагирует только на return из второго вызова, который в большинстве случаев возвращает Meteor.error, что приводит к результату в виде выводе пользователю ошибки какого либо рода (чаще всего с порядком хода), но при этом результаты первого вызова, который прошел правильно, заносятся в актуальное состояние и отображаются опять же пользователю.
Это порождает видимую разницу, когда сообщили о неверных действиях, но само действие свершилось
  • Вопрос задан
  • 208 просмотров
Решения вопроса 1
@Alecxandrys Автор вопроса
По умолчанию Meteor.call по прошествии 30 секунд, при наличии колбека, не получив ответа от сервера, производит второй вызов с этим же набором параметров.
Причина такой задержки не важна, даже если она вызвана дебагом на стороне сервера через IDE.
Лечится применением Meteor.apply(), в котором можно указать параметр noRetry, который предотвратит подобное поведение.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@Stepanya
Во первых в дебаггере узнайте кто вызывает эта функцию, во вторых пофиксите этот вызова
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы