Отложенный JQuery 3.0 не выполняется, затем обратный вызов при вызове разрешения

Я пытаюсь заставить мою библиотеку работать в jQuery 3.0, и она не работает из-за прерывания изменений в отложенных объектах, у меня есть такой код:

    function ready(defer) {
        return function(fun) {
            if (defer.state() !== 'resolved') {
                defer.then(fun).fail(function(e) {
                    self.error(e);
                });
            } else {
                fun.call(fun);
            }
        };
    }

и у меня есть два метода паузы и возобновления

        pause: function(visible) {
            if (self.id() == 4) {
                console.log('pause call');
            }
            cmd_ready(function ready() {
                onPause();
                paused = true;
                if (self.id() == 4) {
                    console.log('pause', paused);
                }
                command_line.disable();
                if (!visible) {
                    command_line.hidden();
                }
                if ($.isFunction(settings.onPause)) {
                    settings.onPause.call(self);
                }
            });
            return self;
        },
        resume: function() {
            if (self.id() == 4) {
                console.log('resume call');
            }
            cmd_ready(function ready() {
                paused = false;
                if (self.id() == 4) {
                    console.log('resume', paused);
                }
                if (terminals.front() === self) {
                    command_line.enable();
                } else {
                    if (self.id() == 4) {
                        console.log('not front');
                    }
                }
                command_line.visible();
                var original = delayed_commands;
                delayed_commands = [];
                for (var i = 0; i < original.length; ++i) {
                    self.exec.apply(self, original[i]);
                }
                self.trigger('resume');
                var fn = resume_callbacks.shift();
                if (fn) {
                    fn();
                }
                scroll_to_bottom();
                if ($.isFunction(settings.onResume)) {
                    settings.onResume.call(self);
                }
            });
            return self;
        },

Отсрочка необходима, потому что я выполняю паузу перед созданием объекта command_line.

и я вызываю решиться после первой паузы:

        if (self.id() == 4) {
            console.log('resolve');
        }
        command_defer.resolve();

и порядок журналов, как это:

pause call
resolve
resume call
resume false
resume call
resume false
pause true

заказ должен выглядеть так:

pause call
resolve
pause true
resume call
resume false
resume call
resume false

зачем делать паузу, тогда обратный вызов вызывается задолго до того, как вызывается метод resol? это работало в jQuery 2.

0 ответов

Другие вопросы по тегам