Попытка использовать $ .Deferreds вместо setTimeOut, который я использовал ранее. У меня проблема, поскольку writer() на самом деле не выполняется, потому что $ .each по-прежнему зацикливаются в то время, когда вызывается print().
Я еще не видел пример $ .Deferreds с циклами. Очевидно, что нижеследующее неверно, и я уверен, что это связано с решением - любая помощь будет оценена по достоинству.
$.when(writer()).done(function() {
printer();
});
function writer(){
var deferred = new $.Deferred();
if(x){
$("a").each(function() {...});
}
if(y){
$("img").each(function() {...});
}
if(z){
$("div").each(function() {...});
}
deferred.resolve();
return deferred.promise();
}
function printer(){...}
Подумайте об этом, вы всегда его разрешения, прежде чем вернуть его, так что '.done' всегда будет происходить сразу после вызова 'writer', независимо от того, выполняются ли какие-либо асинхронные события внутри вашего' .each'. Если вы не выполняете асинхронную работу внутри '$ .each', вам не нужны отложенные объекты. –
@KevinB - это именно то, что я понял, просто не уверен, как вернуть несколько отложенных до запуска принтера() – Jason
Несвязанный, но почему вы вызываете '.each()' на объект jQuery, который будет содержать только максимум один элемент? –