【发布时间】:2017-07-29 18:37:05
【问题描述】:
我正在尝试既能够处理分页 API,又能够在因过多请求而受到限制时重试。如果响应对象中存在“nextToken”,则通过递归处理分页。我希望能够捕获一个限制异常,并通过在不传递令牌的情况下递归有效地重新启动整个请求。这是我当前的代码:
function getAllExecHist(execArn) {
var sfn = new AWS.StepFunctions();
sfn = Promise.promisifyAll(sfn);
execHists = [];
return new Promise(function(resolve, reject) {
function getExecHist(nextToken) {
params = {};
params.executionArn = execArn;
if (nextToken !== undefined) {
params.nextToken = nextToken;
}
sfn.getExecutionHistoryAsync(params)
.then(function(results) {
execHists = execHists.concat(results.events);
if (!results.nextToken) {
resolve(execHists);
}
else {
getExecHist(results.nextToken);
}
})
.catch(function(e) {
console.log('caught this: ', e);
console.log('retrying');
return new Promise(function(res, rej) {
console.log('Sleeping');
setTimeout(function() {
execHists = [];
res(getExecHist());
}, random(100,10000));
});
})
}
getExecHist();
});
}
递归处理分页没有问题,但自从添加了catch,它就永远不会返回。任何想法我做错了什么/如何解决?
【问题讨论】:
-
getExistHist()不返回任何内容,因此不清楚您要对res(getExecHist())做什么。 -
您的
execHists和params是accidentally global -
只是好奇,为什么要在出错后重新开始,现在的结果不应该仍然有效吗?
-
您是否遇到任何错误?你的日志是什么样子的?