我很努力地在以下任务中发送多个AJAX调用。 API返回值有两个参数:userId
和offsetValue
,并返回指定用户的最后10条消息,从指定的偏移量开始。如果偏移量大于用户的消息总数,则API会返回一个空字符串。承诺顺序运行嵌套承诺,并在第一次拒绝时解决
我写了一个函数,返回一个单独的承诺,获得10条消息指定的userId
和offsetValue
。
function getMessages(userId, offsetValue) {
return new Promise(function (resolve, reject) {
$.ajax(
{
url: 'https://example.com/api.php',
type: 'POST',
data: {
action: 'get_messages',
offset: offsetValue,
user: userId
},
success: function (response) {
if (response != '') {
resolve(response);
} else {
reject(response);
}
},
error: function (response) {
reject(response);
}
});
});
}
我需要使用.all()
多个userId
运行并行任务,但是我不能,因为我事先不知道有多少信息是如何做的每个用户的每个userId
(由每次10递增offsetValue
)平行的子任务有,所以执行应停止时,第一个人的承诺被拒绝(即offsetValue
是超过总消息数)。事情是这样的:
var messages = '';
getMessages('Alex', 0)
.then(function(result) {
messages += result;
getMessages('Alex', 10);
.then(function(result) {
messages += result;
getMessages('Alex', 20)
....
});
});
那么,有没有办法一个一个依次运行与迭代参数sequental承诺和解决整体连接的结果在第一次拒绝?
您正在寻找递归。 – Bergi
你的意思是*顺序*。承诺永远不会同步。 – Bergi