租房小程序前端代码
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

26 lines
685 B

3 months ago
  1. export function retry(this: any, func: Function, retryMax: number, config: any = {}) {
  2. let retryNum = 0;
  3. const { retryDelay = 500, errorHandler = () => true } = config;
  4. const funcR = (...arg) => {
  5. return new Promise((resolve, reject) => {
  6. func(...arg)
  7. .then(result => {
  8. retryNum = 0;
  9. resolve(result);
  10. })
  11. .catch(err => {
  12. if (retryNum < retryMax && errorHandler(err)) {
  13. retryNum++;
  14. setTimeout(() => {
  15. resolve(funcR(...arg));
  16. }, retryDelay);
  17. } else {
  18. retryNum = 0;
  19. reject(err);
  20. }
  21. });
  22. });
  23. };
  24. return funcR;
  25. }