Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/413.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jquery3.0延迟don';调用resolve时,不要执行然后回调_Javascript_Jquery_Deferred_Jquery 3 - Fatal编程技术网

Javascript jquery3.0延迟don';调用resolve时,不要执行然后回调

Javascript jquery3.0延迟don';调用resolve时,不要执行然后回调,javascript,jquery,deferred,jquery-3,Javascript,Jquery,Deferred,Jquery 3,我试图使我的库在jQuery 3.0中工作,但由于延迟对象中的中断更改而无法工作,我有如下代码: function ready(defer) { return function(fun) { if (defer.state() !== 'resolved') { defer.then(fun).fail(function(e) { self.error(e);

我试图使我的库在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 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
我有两种方法暂停和恢复

        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;
        },
日志的顺序如下:

    function ready(defer) {
        return function(fun) {
            if (defer.state() !== 'resolved') {
                defer.then(fun).fail(function(e) {
                    self.error(e);
                });
            } else {
                fun.call(fun);
            }
        };
    }
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
顺序应如下所示:

    function ready(defer) {
        return function(fun) {
            if (defer.state() !== 'resolved') {
                defer.then(fun).fail(function(e) {
                    self.error(e);
                });
            } else {
                fun.call(fun);
            }
        };
    }
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

为什么在调用resolve之后很久才调用pause然后回调?它在jQuery2中工作。

使用
ready
方法是一件可怕的事情。应该是
returndelay.then(fun),没有任何分支。请发布一个@Bergi。我想让代码像没有延迟对象一样被同步调用。是的,我可以看到你想要它,而这正是当你添加了如何调用此代码时,请同时显示预期结果,而不仅仅是实际结果。