使用promises循环ajax函数

时间:2016-07-07 22:46:55

标签: javascript jquery json ajax es6-promise

我刚刚开始调查es6-promises并且我无法绕过它。在我的应用程序中,我试图通过ajax调用返回数据并继续循环,直到找不到更多数据(基本上是分页)。

这是一个返回promise对象的ajax调用:

function getDeals(start, url) {
   return Promise.resolve($.ajax({
        type: 'GET',
        url: url,
        data: { start: start },
        global: false,
        success: function() {},
        error: function() {}
    }));
}

这是包含功能:

var start = 0;

getDeals(start, url).then(function (data) {
    // The call returns a more data flag if there are more records
    moreData = data.moreData;
    start = data.records.count;
}).then(function () {
    if (moreData) {
        // Here is where I want to continue calling the function 
        // until no more records are found
        getDeals(start, url);
    }
});

每次调用都返回100条记录,因此我需要继续循环直到moreData标志为false。此外,不确定promise方法是否是最有效的方法。

1 个答案:

答案 0 :(得分:3)

$ .ajax已经为您返回一个承诺,因此您不需要创建另一个承诺,只需传入您想要运行的成功和失败函数。

function getDeals(start, url, success, error) {
    $.ajax({
        type: 'GET',
        url: url,
        data: { start: start },
        global: false,
        success: success,
        error: error
    });
}

并将其命名为

var start = 0;

getDeals(start, url, success);

function success (data) {
    // The call returns a more data flag if there are more records
    moreData = data.moreData;
    start = data.records.count;
    if (moreData) {
    // Here is where I want to continue calling the function 
            // until no more records are found
        getDeals(start, url, success);
    }
}