我刚刚开始调查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方法是否是最有效的方法。
答案 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);
}
}