У меня есть код, который завершает отдельный набор операций в цепочке. Сам набор операций выполняется в цикле. Из-за характера системы, с которой я имею дело, наборы операций необходимо выполнять синхронно (т. Е. Следующий набор операций не может быть выполнен до завершения первого набора). Асинхронное выполнение может отбросить удаленный процессор (не в моем контроле) и привести к сбою кода. Прямо сейчас, единственным способом, которым я смог заставить это работать, является использование предупреждающих ящиков, что является действительно хромым, а не вариантом. Я пробовал:Выполнение набора работ в цикле только после завершения предыдущего набора
- с помощью $ .ajax и установка асинхр ложной
- используя функцию отключения
- коробки Уведомления (используется в отчаянии)
Вот код - Любые мысли ?:
$('input:checked').each(function(index){
//get the item's location id
var currentInput = $(this).val();
var copyUser = function(){$.get(urlCopyPrefix + currentInput + urlSuffix);}
var moveUser = function(){$.get(urlMovePrefix + moveLocation + urlSuffix);}
var cleanup = function(){
var newSibling = $('#module-' + moveLocation);
newSibling.before('<li>New Line</li>');
alert('done');
}
/* --> THIS IS THE CODE IN QUESTION <-- */
$.when(copyUser()).pipe(moveUser).then(cleanup);
});
Я прошу отличаться. 'copyUser' &' moveUser' не откладываются. Когда они будут вызваны, они вернут Отсрочку. Единственный способ для 'when' /' then' работать, если вы вызываете функцию, и передать возвращенную Deferred в 'when' /' then'. –
Кроме того, он абсолютно * должен * использовать метод 'pipe'. Если вы просто добавляете функции 'then', они не будут ждать друг друга. OP явно хочет, чтобы 'moveUser' возвращался, прежде чем он запускает' cleanup'. Единственный способ добиться этого - через «трубу». –
OK, переключитесь на 'pipe()'. Документ jQuery на трубе бесполезен. – jfriend00