Why would this AWS lambda cause error: WARNING: Callback/response already delivered
Why would this AWS lambda cause error: WARNING: Callback/response already delivered
- 我用
amazon-cognito-identity-js
. 为 signUp
创建了一个 API 网关 + lambda
- 然后我用 Typescript 为 preSignUp 实现了一个 Cognito 触发函数
我使用Serverless框架打包部署。运行时是节点 12
+++++++
const wrapperHandler: Handler<CognitoUserPoolEvent> = async (
event,
context,
callback
) => {
let error = null;
try {
await myAsyncFunc();
} catch (e) {
error = e;
}
callback(error, event);
};
一切正常,它可以return将错误发送到实际的端点lambda,然后returned,如果没有错误,将执行逻辑。
但是,这个警告很烦人。
此代码适用于 CloudWatch
中的 preSignUp
WARNING: Callback/response already delivered. Did your function invoke the callback and also return a promise? For more details, see: https://docs.aws.amazon.com/lambda/latest/dg/nodejs-prog-model-handler.html
在代码中,我在调用回调之前没有return任何东西,为什么会这样?以及如何解决。
作为您收到的错误消息,您将回调样式与 async/await
样式混合使用,然后它会引发警告。
我更喜欢使用 async/await
。这意味着,处理函数始终是一个异步函数(带有 async 关键字),然后不调用 callback
函数,只是 return 结果,并且处理函数中不需要 callback
参数。
在错误情况下,直接抛出错误(没有 try/catch
块)。
const wrapperHandler: Handler<CognitoUserPoolEvent> = async (
event,
context,
// callback
) => {
// let error = null;
try {
await myAsyncFunc();
} catch (e) {
// error = e;
// Do something with your error
throw e;
}
// callback(error, event);
return event; // just return result for handler function
};
简单来说:
const wrapperHandler: Handler<CognitoUserPoolEvent> = async (
event,
context,
) => {
await myAsyncFunc();
return event;
};
- 我用
amazon-cognito-identity-js
. 为 - 然后我用 Typescript 为 preSignUp 实现了一个 Cognito 触发函数
signUp
创建了一个 API 网关 + lambda
我使用Serverless框架打包部署。运行时是节点 12
+++++++
const wrapperHandler: Handler<CognitoUserPoolEvent> = async (
event,
context,
callback
) => {
let error = null;
try {
await myAsyncFunc();
} catch (e) {
error = e;
}
callback(error, event);
};
一切正常,它可以return将错误发送到实际的端点lambda,然后returned,如果没有错误,将执行逻辑。
但是,这个警告很烦人。
此代码适用于 CloudWatch
中的preSignUp
WARNING: Callback/response already delivered. Did your function invoke the callback and also return a promise? For more details, see: https://docs.aws.amazon.com/lambda/latest/dg/nodejs-prog-model-handler.html
在代码中,我在调用回调之前没有return任何东西,为什么会这样?以及如何解决。
作为您收到的错误消息,您将回调样式与 async/await
样式混合使用,然后它会引发警告。
我更喜欢使用 async/await
。这意味着,处理函数始终是一个异步函数(带有 async 关键字),然后不调用 callback
函数,只是 return 结果,并且处理函数中不需要 callback
参数。
在错误情况下,直接抛出错误(没有 try/catch
块)。
const wrapperHandler: Handler<CognitoUserPoolEvent> = async (
event,
context,
// callback
) => {
// let error = null;
try {
await myAsyncFunc();
} catch (e) {
// error = e;
// Do something with your error
throw e;
}
// callback(error, event);
return event; // just return result for handler function
};
简单来说:
const wrapperHandler: Handler<CognitoUserPoolEvent> = async (
event,
context,
) => {
await myAsyncFunc();
return event;
};