我有这两个功能:
import { handler } from '../lib/handler-lib'
import { APIGatewayEvent, Context } from 'aws-lambda'
export const producer = handler(async (
_event: APIGatewayEvent,
_context: Context
): Promise<object> => {
return {
some: 'data result'
}
})
import {
APIGatewayEvent,
APIGatewayProxyResult,
Context
} from 'aws-lambda'
export const handler = (lambda: Function): object => {
return async (
event: APIGatewayEvent,
context: Context
): Promise<APIGatewayProxyResult> => {
let body: object
let statusCode: number
try {
body = await lambda(event, context)
statusCode = 200
} catch (e) {
body = { error: e.message }
statusCode = 500
}
return {
body: JSON.stringify(body),
statusCode
}
}
}
这完全可以简化吗?
这两个函数都定义了 event
和 context
的类型,如果只有第二个函数这样做就太好了,这样所有调用者都可以免费获得类型声明。
是否应该定义 lambda: Function
的参数?
答案 0 :(得分:0)
首先,我会用输入和输出值更清晰地定义 lambda
函数。
lambda: (e: APIGatewayEvent, ctx: Context) => Promise<any>
此外,您还可以通过简单地返回而不创建临时变量来使代码更加简洁:
import {
APIGatewayEvent,
APIGatewayProxyResult,
Context
} from 'aws-lambda'
export const handler = (lambda: (e: APIGatewayEvent, ctx: Context) => Promise<any>): object => {
return async (
event: APIGatewayEvent,
context: Context
): Promise<APIGatewayProxyResult> => {
try {
return {
body: JSON.stringify(await lambda(event, context)),
statusCode: 200
}
} catch (e) {
return {
body: JSON.stringify({ error: e.message }),
statusCode: 500
}
}
}
}