我有一个带setTimeOut的javascript函数,如果API调用有任何错误,我正尝试调用相同的函数。我在catch块中调用了相同的函数。我的节点服务器将崩溃并且资源将被阻塞或将继续调用getData()函数
let retry = ()=> {
setTimeout(() => {
getData()
retry()
}, 3000);
}
let getData = () =>{
Someapi.getData().then((token) => {
console.log(`Data after 3 seconds->${token}`)
}).catch((err) => {
getData()
})
}
答案 0 :(得分:1)
我不知道这项工作是否可行。
let retry = () => {
setTimeout(() => {
getData();
retry();
}, 3000);
};
while (true) {
let getData = () => {
Someapi.getData()
.then(token => {
console.log(`Data after 3 seconds->${token}`);
return false;
})
.catch(err => {
return true;
});
};
}
答案 1 :(得分:1)
我在项目中使用了此重试代码,在生产中效果很好:
const pause = (duration) => {
return new Promise(resolve => setTimeout(resolve, duration));
};
const retry = (retryTimes, func, delay) => {
return func().catch(
(err) => {
if(retryTimes > 0) {
return pause(delay).then(
() => retry(retryTimes - 1, func, delay * 2)
);
} else {
return Promise.reject(err);
}
}
);
};