停止Promise Ajax链

时间:2018-09-11 08:05:17

标签: javascript jquery ajax promise deferred

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

0 个答案:

没有答案