Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/467.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何包装javascript lambda处理程序函数?_Javascript_Node.js_Aws Lambda_Wrapper - Fatal编程技术网

如何包装javascript lambda处理程序函数?

如何包装javascript lambda处理程序函数?,javascript,node.js,aws-lambda,wrapper,Javascript,Node.js,Aws Lambda,Wrapper,我有几个用Javascript编写的lambda函数。是否有任何方法可以包装这些处理程序函数以执行一些常见的日志代码 // handlers.js export const emailHandler = (event, context, callback) => { email(); } export const loginHandler = (event, context, callback) => { login(); } 大概是这样的: // genericH

我有几个用Javascript编写的lambda函数。是否有任何方法可以包装这些处理程序函数以执行一些常见的日志代码

// handlers.js
export const emailHandler = (event, context, callback) => {
   email();
}

export const loginHandler = (event, context, callback) => {
   login();
}

大概是这样的:

// genericHandler.js
export const genericHandler => (event, context, callback) => {
   console.log('Event', event);
   // How can I also make this work for login handler?
   return emailHandler(event, context, callback) 
}
export const emailHandler = (event, context, callback) => {
   genericHandler(event, context, callback, email);
}

export const loginHandler = (event, context, callback) => {
   genericHandler(event, context, callback, login);
}

export const genericHandler => (event, context, callback, function) => {
   console.log('Event', event);
   // How can I also make this work for login handler?
   return function(event, context, callback) 
}

const email = (event, context, callback) => {
// email code
}

const login = (event, context, callback) => {
// login code
}


可以将函数作为参数传递给JS中的另一个函数。 所以

然后用通用处理程序替换对登录hander的调用

genericHandler(emailHandler , event, context, callback);
更好的方法是为每个函数使用代理。退房
我认为这里的解决方案是将一些通用逻辑放在一个包/函数中,您可以在每个包/函数中使用。您不希望在另一个Lambda函数中包含一个Lambda函数的代码。您希望尽可能减少代码的大小,以便冷启动更快。当然,如果你的代码很小,它不会有很大的区别,但它是一个反模式的包,在多个函数中使用相同的代码,并让代码根据调用方式做一些不同的事情

也就是说,您总是可以在函数中包含多个入口点,然后传递一些内容来决定从那里调用什么,甚至传递您想要调用的函数。比如说:

// genericHandler.js
export const genericHandler => (event, context, callback) => {
   console.log('Event', event);
   // How can I also make this work for login handler?
   return emailHandler(event, context, callback) 
}
export const emailHandler = (event, context, callback) => {
   genericHandler(event, context, callback, email);
}

export const loginHandler = (event, context, callback) => {
   genericHandler(event, context, callback, login);
}

export const genericHandler => (event, context, callback, function) => {
   console.log('Event', event);
   // How can I also make this work for login handler?
   return function(event, context, callback) 
}

const email = (event, context, callback) => {
// email code
}

const login = (event, context, callback) => {
// login code
}


可能是这样的:
constlogevent=fn=>(event,…args)=>{console.log(event);return fn(event,…args);}
然后
emailHandler=logEvent((event,context,callback)=>{…}