承诺使用Async Ajax调用

时间:2015-07-07 07:59:48

标签: jquery ajax

我正在尝试进行多个异步Ajax调用,并希望在所有ajax调用完成后执行某些操作。所以我试图使用jquery promise功能,但似乎它在ajax调用成功之前调用$ .done函数。

以下是我的代码:

    pool = {a: 1, b: 2};
    for(var camp in pool){
        promises.push(parseFile(camp));
    }

    $.when.apply($, promises).done(function() {
        console.log("All jobs finished");
    });

    function parseFile(fname)
    {
        console.log(fname +" call");
        $.ajax({
            url: "data/" + fname + ".txt",
            dataType: "text"
        })
        .done(function(data) {
            console.log(fname + " done");
        });
    }

控制台日志:

一个电话
b呼叫
所有工作都已完成 //我们应该在结束时被打电话
完成了 b完成了

1 个答案:

答案 0 :(得分:2)

parseFile需要返回一个承诺,否则该方法返回的值将是未定义的,将被视为$.when()作为已解析的值。

function parseFile(fname) {
    console.log(fname);
    //return the ajax promise here
    return $.ajax({
        url: "data/" + fname + ".txt",
        dataType: "text"
    })
        .done(function (data) {
        console.log(fname + " done");
    });
}