машинописный текст: параметры функции:: свойства 'caller', 'callee' и 'arguments' не могут быть доступны в строгом режиме - PullRequest
0 голосов
/ 29 апреля 2019

Я пытаюсь создать универсальную рекурсивную функцию, которая получает функцию с параметрами в качестве параметра.

Я создал функцию 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

Более того, я не могу понять, как отправить новое значение параметра в функцию для выполнения ...

Код ниже упрощен для этого поста. Я удалил рекурсивную часть и просто заменил вторым вызовом той же функции

Большое спасибо!

API-функция с 2 параметрами

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/**/*"]
}
...