Easily retry operations with any retry strategy you want.
Support async functions or functions returned Promise.
npm install promise-with-retry --save
const RetryOp = require('promise-with-retry').default;
function promiseOperation(...args) {
return new Promise((resolve: any, reject: any) => {
// ...
});
}
async function asyncOperation(...args) {
// ...
}
let myOp = RetryOp.buildOperation(promiseOperation);
// or async function:
// let myOp = RetryOp.buildOperation(asyncOperation);
let myRetry = new RetryOp(myAsyncOp(500), (retryOptions) => {
if (retryOptions.returns.error) {
// retry after 5000ms
return 5000;
}
// finish
return;
});
op
is resolved
myRetry.on('op_resolve', (retryOptions, data) => {
});
data
: valueop
resolved
op
is rejected
myRetry.on('op_reject', (retryOptions, error) => {
});
error
: errorop
rejected
event before op
is executed
myRetry.on('retry', (retryOptions) => {
});
op
has stop retry
myRetry.on('finish', (retryOptions) => {
});
fn
:async
function or function returnedPromise
op
: value returned by RetryOp.buildOperation(fn)retryStrategy
: (retryOptions) => {} return a number (ms) as timeout, the retry will happen exactly after that time in milliseconds. if return is not number, will not retry.
retryOptions
:
startTime
: number, mstotalRetryCount
: numberreturns
: return ofop
:- error: error
op
rejected - data: value
op
resolved
- error: error
typescript example:
import RetryOp from 'promise-with-retry';
async function asyncOperation(ms: number) {
// ...
}
let myAsyncOp = RetryOp.buildOperation(asyncOperation);
let myRetry = new RetryOp(myAsyncOp(500), (retryOptions) => {
if (retryOptions.totalRetryCount < 3) {
// will retry after 500ms
return 500;
}
// stop retry
return;
});
myRetry.on('finish', (retryOptions) => {
});
npm tet