我正在创建一个页面来帮助我对电影文件进行排序。而且,我没有发出一个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没有函数resolve()。有什么想法