Что вызывает эту рекурсию с моими вызовами jQuery? - PullRequest
0 голосов
/ 25 февраля 2019

У меня в настоящее время написан код, который будет вызывать функцию после пользовательского вызова .trigger().Это то, что называется:

function _visitAddTag(state, listener) {
        if (state.properties.action = "RedoAddTag") contextMenu.unhide();
        var $target = contextMenu.getContextMenuUI().tags; // Grab tag elements
        var callback = function () {
            if (listener) {
                google.maps.event.removeListener(listener);
            }
            $target.off("tagIds-updated", callback);
            contextMenu.hide();
            next.call(contextMenu.getTargetLabel(), state.transition);
        };
        $target.on("tagIds-updated", callback());
    }

Строка next.call() вызывает запуск этого метода:

function () { // 'this' is contextMenu.getTargetLabel(), as called in Onboarding.js/_visitAddTag()
                tracker.push('Onboarding_Transition', {onboardingTransition: "tag-attribute-1"});
                var tags = this.getProperty('tagIds');
                return tags == [2] ? "adjust-heading-angle-1" : "redo-tag-attribute-1" // Where 2 is the tag_id of the "points into traffic" tag
            }

Где возвращаемое значение "redo-tag-attribute-1" приведет к тому, что всецикл снова

Я вижу здесь потенциал для рекурсии, особенно если событие "tagIds-updated" каким-то образом инициируется во втором вызове функции.Однако, когда я отлаживаю код, это событие срабатывает только один раз.У кого-нибудь есть идеи относительно того, что здесь происходит?Я новичок в JavaScript, так что, может быть, я упускаю что-то очевидное.

1 Ответ

0 голосов
/ 25 февраля 2019

Я не могу полностью обернуть голову вокруг кода.Я вижу две проблемы в вашем коде на данный момент:

  1. $target.on("tagIds-updated", callback()); на самом деле не прикрепляет обработчик событий.Он просто звонит callback немедленно.Вам нужно $target.on("tagIds-updated", callback);.Обратите внимание, что пропущенный ().
  2. tags == [2] всегда будет false. Почему? .Вы, вероятно, можете использовать tags.includes(2) вместо этого.В существующем состоянии эта функция всегда возвращает "redo-tag-attribute-1".Который, возможно, является основной причиной этой рекурсии, с которой вы столкнулись.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...