Я работаю над страницей, чтобы помочь мне отсортировать файлы фильмов. И вместо того, чтобы сделать один ajax-запрос и ждать вечно, чтобы увидеть какой-либо прогресс, я запрашиваю информацию о файле в виде кусков. Я также заранее извиняюсь, поскольку вся эта отсроченная / обещанная вещь действительно нова для меня, поэтому я могу не использовать всю правильную терминологию.
Вот как выглядит мой код JavaScript
// Used to get info about a chunk of movies
var parse_movie_file = function (index){
return $.ajax({
type: 'GET',
url: '/movies/get_info',
dataType: "json",
data: {'movie_index': index}
});
};
$('form').submit(function(e){
// This first request gets a list of files to be parsed
$.ajax({
type: 'GET',
url: '/movies/get_list',
data: $(this).serialize(),
}).done(function(r){
// Create a Deferred object for parsing filenames
var parse_deferred = $.Deferred();
// Set deferred to resolve to start parsing filenames
parse_deferred.resolve();
for (var i = parse_max_progress - 1; i >= 0; i--) {
// Try/Throw/Catch keeps 0 from being used in all asynchronous parse_movie_file calls
try{throw i}
catch(ii){
parse_deferred = parse_deferred.then(function(){
return parse_movie_file(ii, table_body, row_template).done(function(r){
// Update page with response info
});
});
}
}
// <place holder>
});
});
Этот список файлов может стать довольно большим и займет много времени, чтобы просмотреть все из них. Я хорошо справляюсь с большими списками, но иногда я хочу отменить процесс, прежде чем все отложенные обещания будут разрешены.
Могу ли я разорвать цепочку обещаний и остановить любые открытые запросы ajax?
Кроме того, если мне разрешают побочный вопрос, если я перемещаю parse_deferred.resolve();
в // <place holder>
, я получаю сообщение об ошибке, в котором говорится, что parse_deferred не имеет функции resolv (). Любая мысль об этом