如何将参数传递给作为字符串传递给另一个函数的函数?

时间:2017-11-07 12:42:28

标签: javascript function

我有以下代码:

accountSelector.executeInParallel('processAccounts', 'postProcess');


function processAccounts() {
  return JSON.stringify(syncMasterLists());
}

而不是这样,我希望能够将值传递给processAccounts帐户功能。

为此,我更改了代码,所以它现在看起来像这样:

accountSelector.executeInParallel('processAccounts("DE")', 'postProcess');


function processAccounts(arg) {
  return JSON.stringify(syncMasterLists());
}

不幸的是,在引入更改后,我开始收到以下错误:

  

无法找到函数processAccounts(“DE”)。

我无法理解我做错了(如果是,那么有什么不对)或者它只是无法完成的事情。

3 个答案:

答案 0 :(得分:2)

  

我无法理解我做错了(如果是,那么是什么   错了)或者它只是无法完成的事情。

accountSelector.executeInParallel将函数名称作为参数并执行相同的操作,processAccounts("DE")不是有效的函数名称或存在的函数的名称。

根据documentation,有一种方法可以传递optionalInput参数

  

输入,如果由optionalInput指定,将被传递给   functionName

指定的函数
 accountSelector.executeInParallel(functionName, optionalCallbackFunctionName, optionalInput)

在你的情况下,它将是

accountSelector.executeInParallel('processAccounts', 'postProcess', 'DE' );

答案 1 :(得分:0)

为什么不首先调用函数并将'executeInParallel'方法中的结果替换为如下:

var res = processAccounts("DE");
accountSelector.executeInParallel(res, 'postProcess');


function processAccounts(arg) {
  return JSON.stringify(syncMasterLists());
}

答案 2 :(得分:0)

某些关闭可能会解决您的问题,具体取决于accountSelector.executeInParallel的实施方式

const accountSelector = {
  executeInParallel(pre, post) {
    let result = eval(pre)()
    eval(post)(result)
  }
}

accountSelector.executeInParallel(processAccountsWithArg('Foo'), 'postProcess');

function processAccount(arg) {
  console.log('processAccount', arg)
  return JSON.stringify({
    key: 'value'
  });
}

function processAccountsWithArg(arg) {
  return function() {
    return processAccount(arg)
  }
}

function postProcess(result) {
  console.log('postProcess', result)
}

相关问题