我正在尝试创建一个通用的递归函数,以接收带有参数作为参数的函数。
我已经创建了一个函数recursiveExec
,该函数将要执行的API函数作为参数。这个API函数有2个参数。
在递归函数中,我需要更改这两个参数之一的值,然后再次重新运行相同的API函数。
但是,当尝试访问递归函数中的API函数参数时,打字稿会引发错误。
node:13724) UnhandledPromiseRejectionWarning: TypeError: 'caller', 'callee', and 'arguments' properties may not be accessed on strict mode functions or the arguments objects for calls to them
此外,我不知道如何将参数的新值发送到要执行的函数...
下面的代码对此帖子进行了简化。我已经删除了递归部分,只是替换为同一功能的第二次调用
很多东西!
具有2个参数的API函数
const apiFunc= async (
param1: string,
param2?: string | undefined
): Promise<ApiResult> => {
const resu = await apicall({
param1,
param2
});
return resu
};
通用递归函数
const recursiveExec= async (funcExecute: () => any): Promise<any> => {
let d: any[] = [];
console.log(funcExecute.arguments) <-----error is here
const resu = await funcExecute();
d = [...d, ...resu.data];
// HERE IF THE PARAMETER parameter 2 IS NOT NULL I NEED TO
// REEXECUTE THE funcExecute function
if (resu.parameter2 && resu.parameter2!== "") {
// how to pass the new value of parameter2 and then executing function ?
const resu2 = await funcExecute();
d = [...d, ...resu2.data]
}
return d;
};
执行死刑的电话
const li = await recursiveExec(() =>apiFunc("a", "b"));
tsconfig.json
{
"compilerOptions": {
"module": "commonjs",
"resolveJsonModule": true,
"esModuleInterop": true,
"outDir": "dist",
"target": "es6",
"strict": true,
"lib": ["esnext"],
"noImplicitAny": false
},
"include": ["src/**/*"]
}