我遇到了AWS Lamda的问题,该节点早期存在Node 8.10,并返回了隐式null
的回调:
const request = require('request');
exports.handler = async (event, ctx, callback) => {
console.log(`Fetching '${event.url}'...`);
request(event.url, (err, body) => {
if (err) return callback(err);
return callback(null, body);
});
}
这是我自己的更大的lambda函数遇到的问题的基本示例。本质上,当我调用第三方资源时,Lambda在到达回调之前完成。
我已经阅读了一些文档页面和SO帖子,它们涉及:
callbackWaitsForEmptyEventLoop
,但将其设置为false不会改变行为。
我设法通过将代码包装在Promise中然后在调用await
之前使用callback
来迫使它等待响应,但这真的有必要吗?
exports.handler = async (event, ctx, callback) => {
const executeLambda = new Promise((resolve, reject) => {
console.log(`Fetching '${event.url}'...`);
request(event.url, (err, body) => {
if (err) return reject(err);
return resolve(body);
});
});
await executeLambda
.then((res) => callback(null, res))
.catch(callback);
}
注意:我正在docker run --rm -v "$PWD":/var/task lambci/lambda:nodejs8.10 index.handler '{"url": "https://www.google.com"}'
答案 0 :(得分:1)
问题是我用async
声明了处理程序。以下作品:
const request = require('request');
exports.handler = (event, ctx, callback) => {
console.log(`Fetching '${event.url}'...`);
request(event.url, (err, body) => {
if (err) return callback(err);
return callback(null, body);
});
}