mango-v4-ui/utils/index.ts

37 lines
930 B
TypeScript
Raw Normal View History

export const retryFn = async (
fn: (...x: any) => Promise<any>,
opts = { maxRetries: 3 }
) => {
2022-08-31 13:16:48 -07:00
for (let attempt = 1; attempt <= opts?.maxRetries; attempt++) {
try {
return await fn()
} catch (err: any) {
if (attempt <= opts?.maxRetries) {
console.error(err?.message, `(retry ${attempt}/${opts?.maxRetries})`)
await sleep(100)
} else {
console.error(err?.message)
}
}
}
2022-08-31 13:16:48 -07:00
throw Error(`failed after ${opts?.maxRetries} retries`)
}
export async function sleep(ms: number) {
return new Promise((resolve) => setTimeout(resolve, ms))
}
2022-09-18 05:53:28 -07:00
export function isEqual(obj1: any, obj2: any, keys: Array<string>) {
if (!keys && Object.keys(obj1).length !== Object.keys(obj2).length) {
return false
}
keys = keys || Object.keys(obj1)
for (const k of keys) {
if (obj1[k] !== obj2[k]) {
// shallow comparison
return false
}
}
return true
}