为以后的 Javascript 保存参数

Jac*_*yan 5 javascript function

这个问题的标题可能具有误导性。我在理解这个概念时遇到了一些麻烦。我想将所有参数传递给一个函数,但稍后用这些参数调用它。

我目前正在做这样的事情:

function copyRecords(userId, options) {
    const getRecordsWrapper = (userId, options) => () => getRecords(userId, options);
    abstractionService = new MyAbstractionService(getRecordsWrapper);
    ...etc
}
Run Code Online (Sandbox Code Playgroud)

这是我保存并稍后调用函数的地方:

class MyAbstractionService {
    constructor(getRecords) {
        this.getRecords = getRecords;
    }
    performSomeAction() {
        return this.getRecords();
    }
}
Run Code Online (Sandbox Code Playgroud)

我需要这样做,因为getRecords在不同的领域采用不同的参数,我想将它们抽象成一个服务,而不必将一堆参数传递到服务中。这会变得混乱,因为我还需要为其他一些功能执行此操作。

我是否正确地考虑了这一点?除了让函数返回另一个返回我的函数的函数之外,还有其他方法可以做到这一点吗?另外,不确定这是否重要但getRecords返回Promise. 我不想开始工作,Promise直到我稍后进入抽象服务。

hai*_*770 3

在函数式编程术语中,您所描述的是Currying,在 JavaScript 中,您可以使用以下函数实现它的最简单的想法bind()

const getRecordsWrapper = getRecords.bind(null, userId, options);
Run Code Online (Sandbox Code Playgroud)

传递给的第一个参数是稍后调用的函数的函数bind上下文(the ),而其余参数作为常规参数传递。this

如果您正在寻找 JavaScript 中功能齐全的函数式编程框架,请查看Ramda.js(例如)。

  • 这并不是严格意义上的“柯里化”,而是高阶函数的一个示例。 (2认同)