我试图在redux中构建一个中间件来处理api请求。
在寻找灵感时,我找到了这段代码: redux api middleware
export default store => next => action => {
const callAsync = action[CALL_API];
if(typeof callAsync === 'undefined') {
return next(action);
}
.
.
.
function actionWith(data) {
const finalAction = assign({}, action, data);
delete finalAction[CALL_API];
return finalAction;
}
next(actionWith({ type: types.REQUEST }));
.
.
.
}
我的问题是:为什么函数actionWith
在主函数内部被解析?如果函数在外面被解析并且还会将函数传递给action对象,那么它会不会更简单?
这有什么好处?
答案 0 :(得分:2)
如果函数在外面被解析并且还会将函数传递给action对象,那会不会更简单?
你是对的:只要你提供actionWith
作为参数(action
),就可以在外部函数之外取actionWith(data, action)
。
功能相同。但是,我主要关注的是可维护性:如果你需要修改内部函数来执行需要外部函数的另一个变量的东西,你需要添加另一个参数。如果函数的任务与外部函数的内部结构紧密相关,那么当你需要修改代码时,保留它可以让你随时访问外部函数的变量。
我会平衡额外参数的这种关注(通常有利于保持函数内部)与使代码的其他部分可用的函数的有用性(这有利于将其带到外部,以提高可见性)。例如,如果我有许多外部函数,每个函数都有自己的actionWith
内部副本,那么让它们共享actionWith
的单个版本会更好。
就是说,如果我有
function outer1(action) {
function actionWith(data) { ... }
actionWith(thing);
}
function outer2(action) {
function actionWith(data) { ... }
actionWith(thing);
}
从可维护性的角度来看,我宁愿拥有
function actionWith(action, data) { ... }
function outer1(action) {
actionWith(action, thing);
}
function outer2(action) {
actionWith(action, thing);
}