Async/await 确实让我的代码更干净、更干燥。我不确定错误处理方面的最佳实践。我发现的大多数示例在 async
函数中都有 try
/catch
。如果调用者有 .catch()
,您是否必须拥有它?示例2相对于下面的示例1有什么优势?
示例1没有异步函数中的try/catch:
function addReminder(data) {
/*do some stuff*/
saveReminder(data)
.then(/*do some stuff*/
.catch(error => console.log("Error saving reminder"));
}
async function saveReminder(data) {
await AsyncStorage.setItem('reminders', JSON.stringify(data));
/* do some stuff */
}
示例2在异步函数中使用 try/catch:
function addReminder(data) {
/*do some stuff*/
saveReminder(data)
.then(/*do some stuff*/)
.catch(error => console.log("Error saving reminder"));
}
async function saveReminder(data) {
try {
await AsyncStorage.setItem('reminders', JSON.stringify(data));
/* do some stuff */
} catch (error) {
throw new Error(error);
}
}
最佳答案
要捕获异步函数的异常,需要等待调用。因此,如果您不等待它,则只能使用示例 1 中的选项。但是,如果等待它,您可以使用任一选项。
在示例 2 中,您还有一个额外的好处:如果您获得了错误发生的确切位置,则在引发错误之前将其记录下来会很有用。在函数 saveReminder
之后的代码中,Promise 末尾处的 catch 将捕获任何未处理的异常,无论它发生在哪个 Promise 链上。
关于javascript - JS 异步/等待 : catch in caller instead of try/catch?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52231347/