Javascript 使用承诺循环使用ajax函数
我刚开始调查,但我很难把我的头绕在它周围。在我的应用程序中,我试图通过ajax调用返回数据,并继续循环,直到找不到更多的数据为止(基本上是分页) 下面是返回承诺对象的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
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等待每个调用完成可能会产生多个请求,但随后必须开始跟踪并增加一点复杂性。