Skip to content

Commit 907a983

Browse files
authored
(fix): Fix Typescript Timeouts when Lambda handler returns undefined (#661)
* resolve immediately when handler returns undefined * only resolve immediately if handler doesn't return a callback * add unit test
1 parent b33c197 commit 907a983

File tree

2 files changed

+32
-0
lines changed

2 files changed

+32
-0
lines changed

src/utils/handler.spec.ts

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -296,4 +296,33 @@ describe("wrap", () => {
296296

297297
expect(calledOriginalHandler).toBeFalsy();
298298
});
299+
300+
it("completes when handler returns undefined", async () => {
301+
const handler: Handler = (event, context) => {
302+
// No return statement, implicitly returns undefined
303+
};
304+
305+
let calledStart = false;
306+
let calledComplete = false;
307+
let calledOriginalHandler = false;
308+
309+
const wrappedHandler = wrap(
310+
handler,
311+
async () => {
312+
calledStart = true;
313+
},
314+
async () => {
315+
calledComplete = true;
316+
},
317+
);
318+
319+
const result = await wrappedHandler({}, mockContext, () => {
320+
calledOriginalHandler = true;
321+
});
322+
323+
expect(result).toEqual(undefined);
324+
expect(calledStart).toBeTruthy();
325+
expect(calledComplete).toBeTruthy();
326+
expect(calledOriginalHandler).toBeFalsy();
327+
});
299328
});

src/utils/handler.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,9 @@ export function promisifiedHandler<TEvent, TResult>(handler: Handler<TEvent, TRe
121121
if (asyncProm !== undefined && typeof asyncProm.then === "function") {
122122
// Mimics behaviour of lambda runtime, the first method of returning a result always wins.
123123
promise = Promise.race([callbackProm, asyncProm]);
124+
} else if (asyncProm === undefined && handler.length < 3) {
125+
// Handler returned undefined and doesn't take a callback parameter, resolve immediately
126+
promise = Promise.resolve(undefined);
124127
}
125128
return promise;
126129
};

0 commit comments

Comments
 (0)