我在早期存在的节点8.10的AWS Lambda中遇到了一个问题,其中包含隐式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不会更改行为。
我已经设法通过将代码 Package 在一个承诺中,然后在调用callback
之前使用await
来迫使它等待响应,但这真的有必要吗?
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"}'
模拟这个
1条答案
按热度按时间gmxoilav1#
问题是我用
async
声明了处理程序。