Javascript jquery3.0延迟don';调用resolve时,不要执行然后回调
我试图使我的库在jQuery 3.0中工作,但由于延迟对象中的中断更改而无法工作,我有如下代码: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);
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。我想让代码像没有延迟对象一样被同步调用。是的,我可以看到你想要它,而这正是当你添加了如何调用此代码时,请同时显示预期结果,而不仅仅是实际结果。