0

我正在尝试使我的库在 jQuery 3.0 中工作,但由于 Deferred 对象中的重大更改而无法工作,我有这样的代码:

    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

为什么在调用解析后很长时间才调用暂停然后回调?它在 jQuery 2 中工作。

4

0 回答 0