异步/等待肯定使我的代码更整洁,更干燥。对于错误处理,我不确定最佳实践。我发现的大多数示例在try
函数中都有一个catch
/ async
。如果呼叫者有一个.catch()
,您是否必须拥有它?与下面的Example1相比,Example2有什么优势?
Example1 无 尝试/捕获异步功能:
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 */
}
Example2 with 尝试/捕获异步功能:
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);
}
}
答案 0 :(得分:0)
要从异步函数中捕获异常,需要等待调用。因此,如果不等待它,则只有如示例1所示的选项。但是,如果等待它,则可以使用其中一个选项。
在示例2中,您还有其他好处,如果您获得发生错误的确切位置,则在引发错误之前对其进行记录可能很有用。在函数saveReminder
之后的代码中,promise末尾的捕获将捕获任何未处理的异常,而与它发生在哪个promise链无关。