【发布时间】:2020-10-17 03:31:37
【问题描述】:
我正在使用仅支持回调签名的客户端,因此,我想确保在从回调函数返回值时使用最佳实践。我目前将它包装在一个承诺中并将承诺返回给 lambda 运行时。以下是我拥有的功能代码/格式。
const client = new SomeClient();
exports.handler = async (event, context) => {
try {
return new Promise((resolve, reject) => {
client.get(function (err, response) {
if (err) {
reject(err);
} else {
resolve(response);
}
});
});
} catch (err) {
return err;
}
};
我知道我可以使用同步 lambda 函数并在返回之前等待响应。但这会花费更多的执行时间并在 AWS lambda 中产生更多费用。
【问题讨论】:
-
1) 在你的 try 块中,你返回一个 promise,如果你想触发 catch,你需要等待这个 promise。正如所写的那样,它只有在承诺的形成而不是拒绝的错误时才会触发。
-
2) 你发现一个错误来返回它。这不太可能有用
-
3) 一般而言,如果您想要计算需要花费执行时间的东西,而使用 aws lambda,这是您需要付费的东西。 Promise 或 callbacks 或 async/await 在下面都是相同的,您不会通过使用一种或另一种语法来节省宝贵的便士。
-
@LevKuznetsov 感谢您的回复。除了没有正确使用 try/catch 之外,返回 Promise 是否是从回调中返回值的最佳方式?
标签: javascript node.js amazon-web-services asynchronous aws-lambda