保存参数以供以后的 Javascript 使用



这个问题的标题可能具有误导性。我很难理解这个概念。我想将所有参数传递到一个函数中,但稍后使用这些参数调用它。

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

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

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

class MyAbstractionService {
constructor(getRecords) {
this.getRecords = getRecords;
}
performSomeAction() {
return this.getRecords();
}
}

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

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

在函数式编程术语中,你描述的是 Currying,而在 JavaScript 中,你可以使用bind()函数实现最简单的概念:

const getRecordsWrapper = getRecords.bind(null, userId, options);

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

如果你正在寻找一个功能齐全的JavaScript函数式编程框架,看看Ramda.js(例如(。

使用bind()是个好主意。这是一个替代方案。把它留给读者哪个是首选。

function copyRecords(userId, options) {
return () => {
return getRecords(userId, options);
}
};

请注意,这与以下内容几乎相同:

function copyRecords(userId, options) {
return getRecords.bind(this, userId, options);
};

所以它归结为主观偏好。

由于部分应用程序是一个常见问题,因此有人建议直接在javascript中支持它而无需.bind。如果提案获得通过,它将如下所示:

new MyAbstractionService(getRecords(userId, options, ...))

最新更新