{"version":3,"sources":["../src/func/retry.ts"],"names":["retry","fn","options","count","interval","defaultValue","error","i","delay"],"mappings":";;;;AAcQ,SAASA,CAAeC,CAAAA,CAAAA,CAAcC,CAAoE,CAAA,CAC9G,OAAO,gBAAwB,CAC3B,GAAI,CAAC,MAAAC,CAAM,CAAA,CAAA,CAAE,QAAAC,CAAAA,GAAAA,CAAS,IAAK,OAAQC,CAAAA,CAAY,CAAIH,CAAAA,CAAAA,CAC/CI,CACJ,CAAA,IAAA,IAAQC,CAAE,CAAA,CAAA,CAAEA,EAAEJ,CAAM,CAAA,CAAA,CAAEI,CAAI,EAAA,CAAA,CACtB,GAAG,CACC,OAAO,MAAMN,CAAAA,CAAG,MAAM,IAAK,CAAA,SAAS,CACxC,CAAA,MAAQ,CAAO,CAAA,CAEX,GAAG,CAAA,CAAE,YAAY,IAAK,CAAA,QAAA,CAAS,QAAQ,CAAA,CACnC,MAAM,CAENK,CAAAA,CAAAA,CAAQ,EAEhB,CAAA,CAEIC,EAAEJ,CAASC,EAAAA,GAAAA,CAAS,CAAKE,EAAAA,CAAAA,EAAU,CAACA,CAAAA,GACpC,MAAME,CAAAA,CAAMJ,GAAQ,EAE5B,CACA,GAAGC,CAAAA,EAAc,MAAaC,CAC1B,CAAA,MAAMA,CAEN,CAAA,OAAOD,CAEf,CACJ","file":"chunk-CA3TRCFS.mjs","sourcesContent":["import { delay } from \"../async/delay\"\nimport type { AsyncFunction} from \"../types\"\n/**\n *  重试执行\n *   当执行fn出错(throw new Error)时尝试重试执行\n *   如果fn throw的错误类名是以Signal结尾的除外\n *   特殊情况：\n *   触发以Signal结尾的错误对象代表了传递某种信号，而不是真正的错误，因此不需要重试执行\n *   之所以有这样的考虑，是因为在些场合，我们约定当函数执行时可以通过throw new XXXSignal的方式来向上传递信号，不被视为错误\n * \n *\n * @param fn\n * @param options\n */\n export function retry(this:any,fn: Function, options:{count?:number,interval?:number,default?:any}):AsyncFunction{\n    return async function(this:any){\n        let {count=1,interval=1000,default:defaultValue} = options\n        let error\n        for(let i=0;i<count+1;i++){\n            try{\n                return await fn.apply(this,arguments)\n            }catch (e:any) {\n                // 如果函数触发一个以Signal结尾的错误，则代表这不是一个一错误，而是一个向上传递的信号，不需要再进行重试\n                if(e.constructor.name.endsWith(\"Signal\")){\n                    throw e\n                }else{\n                    error = e\n                }\n            }\n            // 最后一次执行时不需要延时,如果执行没有错误也不需要执行\n            if((i<count && interval>0 && error) || !error ) {\n                await delay(interval)\n            }\n        }\n        if(defaultValue==undefined && error){\n            throw error\n        }else{\n            return defaultValue\n        }\n    }\n}"]}