Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/446.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用承诺循环使用ajax函数_Javascript_Jquery_Json_Ajax_Es6 Promise - Fatal编程技术网

Javascript 使用承诺循环使用ajax函数

Javascript 使用承诺循环使用ajax函数,javascript,jquery,json,ajax,es6-promise,Javascript,Jquery,Json,Ajax,Es6 Promise,我刚开始调查,但我很难把我的头绕在它周围。在我的应用程序中,我试图通过ajax调用返回数据,并继续循环,直到找不到更多的数据为止(基本上是分页) 下面是返回承诺对象的ajax调用: function getDeals(start, url) { return Promise.resolve($.ajax({ type: 'GET', url: url, data: { start: start }, global: false

我刚开始调查,但我很难把我的头绕在它周围。在我的应用程序中,我试图通过ajax调用返回数据,并继续循环,直到找不到更多的数据为止(基本上是分页)

下面是返回承诺对象的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方法是否是最有效的方法

$。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);
    }
}

$.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);
    }
}

如果您控制服务器端方法,则可以将moreData更改为total,然后将moreData更改为total,而不是等待每次调用完成,您可以生成多个请求,但这样您就必须开始跟踪并增加一点复杂性。如果您控制服务器端方法,则可以将moreData更改为total,然后再更改为total,而不是total等待每个调用完成可能会产生多个请求,但随后必须开始跟踪并增加一点复杂性。