Добрый день!
Сейчас реализовываю довольно сложный процесс на веб-странице с помощью последовательный цепочки ajax-запросов. Причём, имеется дополнительная сложность в виде некоей "ветвистости", которую, собственно, и не могу преодолеть.
Имеется 2 метода, реализующих 2 ветки алгоритма:
Первый метод, основная ветка:
this.start = function(){
// останавливаем репликацию
return this.stopAndClearExistsReplication().always(function(){
// удаляем локальную БД
return this.deleteLocalDB().always(function(){
// создаём локальную БД
return this.createLocalDB().done(function(){
// ставим БД на репликацию
return this.addReplicationDocument().done(function(){
// ставим репликацию на отслеживание
return this.replicationMonitoring();
});
});
});
});
};
Второй метод, реализовано в методе
stopAndClearExistsReplication
:
this.stopAndClearExistsReplication = function(){
return this.stopDBReplication().always(function(){
return this.getReplicationDocument().done(function(doc){
return this.removeReplicationDocument(doc);
});
});
};
Задумывалась примерно такая последовательность и причинно-следственная связь:
- вызываем
stopAndClearExistsReplication()
- вызываем
stopDBReplication()
- В ЛЮБОМ СЛУЧАЕ вызываем
getReplicationDocument()
- В СЛУЧАЕ УСПЕХА вызываем
removeReplicationDocument()
- В ЛЮБОМ СЛУЧАЕ вызываем deleteLocalDB()
- ... ну и далее по первой ветке, с выполнением которой вроде проблем нет, там всё последовательно
Хочется, чтобы пока вся вторая ветка не отработает, то первая (основная) ветка не продолжала выполняться. Однако они начинают выполняться параллельно, из-за чего, конечно же, всякие ошибки. Например, когда метод
removeReplicationDocument
из второй ветки не успел отработать перед
addReplicationDocument
из первой.
Как можно грамотно реализовать эту цепочку ajax-вызовов с помощью jQuery?