【发布时间】:2020-05-19 15:34:05
【问题描述】:
我试图避免使用 try catch 将所有等待的调用包装在异步 lambda 中。我想捕获并发送自定义错误响应,但是与 .catch() 相比,将每个等待的调用包装在 try/catch 中在语法上是丑陋的。有没有办法做这样的事情:
exports.hanlder = async (event, context, callback) => {
const foo = await bar(baz).catch((error) => {
eventResponse.statusCode = 503;
eventResponse.body = JSON.stringify({ message: 'unable to bar' , error});
// normally we'd callback(null, eventResponse)
});
没有像这样包裹在 try/catch 中?
exports.hanlder = async (event, context, callback) => {
let foo;
try {
foo = await bar(baz);
} catch (error) {
eventResponse.statusCode = 503;
eventResponse.body = JSON.stringify({ message: 'unable to bar', error});
return eventResponse;
}
// then do something else with foo
if (foo.whatever) {
// some more async calls
}
一旦你在一个 lambda 中有 7 个等待的调用,有一堆 try/catch 就不是很好了。使用 Promise 内置 .catch() 有更漂亮的方法吗?
【问题讨论】:
-
是的,您可以将
.catch()与await一起使用,它会返回一个承诺。 -
Bergi,但我无法在 catch 中返回 eventResponse,因为它在 catch 块中返回,而不是在整个 lambda 中返回。
-
此时,为什么不使用所有的 Promise 呢?
-
ew,你的意思是有一层很深的承诺链?
-
不要这样,这取决于偏好。我个人喜欢它
标签: javascript aws-lambda async-await