在我的本地mocha测试中,以下处理函数工作正常。但是,当我上传到AWS(使用无服务器框架)时,它会超时(除非您没有提供uid
参数,然后它会立即正确响应。)
特别奇怪的是,在不到3秒钟内(超时设置为5秒),作业完成,甚至输出“post-facto”日志消息,但它以某种方式调用回调并且没有完成Lambda功能
这是cloudwatch日志:
] 1
这是处理程序函数:
export const handler = (event: IRequestInput, context: IContext, cb: IGatewayCallback) => {
console.log('EVENT:\n', JSON.stringify(event, null, 2));
const uid = _.get(event, 'queryStringParameters.uid', undefined);
if(!uid) {
cb(null, {
statusCode: 412,
body: 'no User ID was provided by frontend'
});
return;
}
oauth.getRequestToken()
.then(token => {
console.log('Token is:\n', JSON.stringify(token, null, 2));
console.log('User ID: ', uid);
token.uid = uid;
return Promise.resolve(token);
})
.then((token) => {
console.log('URL: ', token.url);
cb(null, {
statusCode: 200,
body: token.url
});
console.log('post-facto');
})
.catch((err: PromiseError) => {
console.log('Problem in getting promise token: ', err);
cb(err.message);
});
};
答案 0 :(得分:8)
将以下内容添加为处理函数的第一行:
context.callbackWaitsForEmptyEventLoop = false
答案 1 :(得分:0)
我猜你正在使用lambda和#34; Node.js Runtime 0.10"
所以你应该添加
context.done(null, 'Terminate Lambda');
终止执行。
作为AWS lambda文档,它提到:
仅在Node.js运行时v4.3中支持回调。如果你 正在使用早期的运行时v0.10.42,您需要使用上下文 方法(完成,成功和失败)以正确终止Lambda 功能
请参阅此link以获取以上信息