Отложенный 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.