我正在尝试使我的库在 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 中工作。