我正在尝试设置一个排队系统,以便以n
的间隔重复i
次发布请求。理想情况下,我希望将所有内容包装在一个诺言中,以便使整个过程可以是异步的。
到目前为止,我有这种感觉,有些杂乱无章。我觉得我可能缺少一个更简单的解决方案,但是我似乎找不到任何东西:
// this is mocked to avoid a wall of code
const postData = (url, data) => Promise.resolve(true);
// this is mocked to avoid a wall of code
const resIsFailed = () => true;
const requestChain = ({
url,
data,
maxRequests,
requestTimeout,
currentRequest = 0,
requestIncrement = increment => increment,
}) => {
// exit condition
if (currentRequest >= maxRequests || (!maxRequests)) {
console.log('Too many failed requests');
return Promise.reject(new Error('Too many attempts'));
}
// post the data, if it fails, try again
postData(
url,
data,
).then(res => {
if (resIsFailed(res)) {
console.log('Failed response: ');
console.dir(res);
setTimeout(() => {
requestChain({
url,
data,
maxRequests,
requestTimeout: requestIncrement(requestTimeout),
currentRequest: currentRequest + 1,
requestIncrement,
});
}, requestTimeout);
} else {
return Promise.resolve(res);
}
});
}
requestChain({
url: 'fail',
data: {},
maxRequests: 5,
requestTimeout: 100,
})