Задать вопрос
@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 Оценить Комментировать
Решения вопроса 1
@Alecxandrys Автор вопроса
По умолчанию Meteor.call по прошествии 30 секунд, при наличии колбека, не получив ответа от сервера, производит второй вызов с этим же набором параметров.
Причина такой задержки не важна, даже если она вызвана дебагом на стороне сервера через IDE.
Лечится применением Meteor.apply(), в котором можно указать параметр noRetry, который предотвратит подобное поведение.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@Stepanya
Во первых в дебаггере узнайте кто вызывает эта функцию, во вторых пофиксите этот вызова
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы
Rocket Смоленск
от 80 000 до 130 000 ₽
div. Ставрополь
от 40 000 до 90 000 ₽
Wanted. Санкт-Петербург
До 220 000 ₽