(fn, duration = 3000, interval = 500, description)
| 662 | } |
| 663 | |
| 664 | export async function retry(fn, duration = 3000, interval = 500, description) { |
| 665 | if (duration % interval !== 0) { |
| 666 | throw new Error( |
| 667 | `invalid duration ${duration} and interval ${interval} mix, duration must be evenly divisible by interval`, |
| 668 | ) |
| 669 | } |
| 670 | |
| 671 | for (let i = duration; i >= 0; i -= interval) { |
| 672 | try { |
| 673 | return await fn() |
| 674 | } catch (err) { |
| 675 | if (i === 0) { |
| 676 | console.error(`Failed to retry${description ? ` ${description}` : ""} within ${duration}ms`) |
| 677 | throw err |
| 678 | } |
| 679 | console.warn(`Retrying${description ? ` ${description}` : ""} in ${interval}ms`) |
| 680 | await waitFor(interval) |
| 681 | } |
| 682 | } |
| 683 | } |
| 684 | |
| 685 | export async function hasRedbox(browser, expected = true) { |
| 686 | for (let i = 0; i < 30; i++) { |
no test coverage detected