Javascript JS async/await:调用方中的catch而不是try/catch?
Async/await无疑使我的代码更干净、更枯燥。当涉及到错误处理时,我不确定最佳实践。我发现的大多数示例在Javascript JS async/await:调用方中的catch而不是try/catch?,javascript,async-await,Javascript,Async Await,Async/await无疑使我的代码更干净、更枯燥。当涉及到错误处理时,我不确定最佳实践。我发现的大多数示例在async函数中都有try/catch。如果调用方有一个.catch(),您必须要有它吗?与下面的示例1相比,示例2的优势是什么 示例1在异步函数中不使用try/catch: function addReminder(data) { /*do some stuff*/ saveReminder(data) .then(/*do some stuff*/ .catc
async
函数中都有try
/catch
。如果调用方有一个.catch()
,您必须要有它吗?与下面的示例1相比,示例2的优势是什么
示例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 */
}
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);
}
}
示例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) {
await AsyncStorage.setItem('reminders', JSON.stringify(data));
/* do some stuff */
}
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中,您还有一个额外的好处,即如果您获得了错误发生的确切位置,那么在抛出错误之前记录它会很有用。承诺末尾的捕获(如函数
saverementer
之后的代码中)将捕获任何未处理的异常,无论它发生在哪个承诺链中