Skip to content

Instantly share code, notes, and snippets.

@takenoco82
Created November 28, 2019 13:18
Show Gist options
  • Save takenoco82/e714d8779614d72778cbfdd21d62034d to your computer and use it in GitHub Desktop.
Save takenoco82/e714d8779614d72778cbfdd21d62034d to your computer and use it in GitHub Desktop.
JavaScriptでリトライ
const myFunc = () => {
return new Promise((resolve, reject) => {
if (Math.random() > 0.5) {
console.log("resolve");
resolve("OK");
} else {
console.log("reject");
reject("Error");
}
})
}
function sleep(waitSeconds, func) {
return new Promise(resolve => {
setTimeout(() => {
resolve(func())
}, waitSeconds * 1000);
})
}
function retry({retryCount=3, waitSeconds=1, func}) {
let promise = Promise.reject().catch(() => func());
for (let i = 0; i < retryCount; i++) {
promise = promise.catch(err => {
console.log("Retry:", i + 1);
return sleep(waitSeconds, func)
});
}
return promise;
}
retry({func: myFunc}).then(result => {
console.log("success!", result);
}).catch(error => {
console.log("failed!", error);
})
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment