在项目中有实现的方法,它们将异步执行函数堆栈,但问题是,它们只接受函数,这是一个例子:
self.executeFunction = function(functionStackItem) {
// Some additional check and logics
// Some logging
functionProcessor.processFunction({
processableItem : functionStackItem
});
};
因此,我们有这样的方法,用于创建将同步执行的函数:
userFunction = new Function('globalVariable, logger', userCode);
userFunction(globalVariable, logger);
但是现在,当我们转向异步时我必须使用控制器提供的executeFunction方法,问题是,我不知道如何在这段代码中添加这些参数:
userFunction = new Function('globalVariable, logger', userCode);
// userFunction(globalVariable, logger); cannot use this, because this will call and execute function immediately
projectName.processingController.executeFunction(userFunction); // passing function, that will be executed as needed, but it doesn't contain parameters
正如您在上面的代码中看到的那样,函数会被传递,但是需要的参数:globalVariable和logger将是未定义的 - 我该如何修复它?有没有办法不需要重新处理processingController?
答案 0 :(得分:3)
您要么使用包装函数:
projectName.processingController.executeFunction(function() {
return userFunction(globalVariable, logger);
});
或this
由executeFunction
设置为有意义的内容:
projectName.processingController.executeFunction(function() {
return userFunction.call(this, globalVariable, logger);
});
projectName.processingController.executeFunction(
userFunction.bind(null, globalVariable, logger)
);
...但不是executeFunction
将this
设置为有意义的内容,因为bind
设置了一个特定的this
(我正在使用null
上面的论点)。