JavaScript 在基本的catch块中处理未处理的promise拒绝
在本文中,我们将尝试分析promise拒绝在基本catch块本身中未被处理的情况,以及后续执行时将接收到的输出,并且我们还将通过一个示例来分析其解决方案。
让我们首先分析在JavaScript中声明promise和try-catch块的语法,以在错误捕获和处理过程中使用。
语法: 我们将使用以下语法来声明JavaScript中的promise(使用resolve()方法或reject()方法):
new Promise ((resolve, reject) => {
// do something with either resolve() method....
// or with reject() method...
})
下面是我们在JavaScript中用于声明try-catch块以进行错误捕获和处理的语法:
try {
// do something...
// error must be caught in this block itself...
}
catch(error_variable) {
// do something with this error_variable...
}
在分析以上所有的语法之后, 让我们通过一个示例来分析我们的问题陈述, 这个示例也会涵盖所有上述的语法(从理论上以及使用 JavaScript 进行编码)如下所示:
示例 1:
- 在这个示例中, 我们将首先创建一个方法, 它会返回一个 rejected 状态的 promise(通过 reject() 方法), 该 promise 需要稍后进行缓存。
- 然后我们将再次使用 async 关键字创建一个方法, 在该方法内部, 我们将使用简单的 try-catch 块来存储和捕获第一个函数抛出的错误。
- 在 try 块内部, 我们将创建一个变量, 在变量内部, 我们将使用 await 关键字来存储错误, 然后我们将使用 console.log() 方法来输出结果。
- 在 catch 块内部, 我们实际上不是处理错误, 而是使用 throw 关键字抛出错误, 然后我们会在输出中得到一个警告错误(如输出部分所示)。
JavaScript
<script>
let errorThrownFunction = () => {
return new Promise((resolve, reject) => {
reject("Connection Failed!!..");
});
};
let errorHandlerMethod = async () => {
try {
let result = await errorThrownFunction();
console.log(result);
} catch (error) {
throw new Error(error);
}
};
errorHandlerMethod();
</script>
输出:
现在我们已经很好地可视化了输出,我们知道在捕获块本身中实现了一些错误,并且我们必须对其进行修正。其修正在下面的示例中已经实施。
示例2:
- 在这个示例中,我们将尝试实现两个与前面的示例中实现的相同名称和签名的方法。
- 唯一的变化是在捕获块的 throw 语句本身中的变化,因为通过抛出一个错误,我们实际上避免了错误的处理过程,我们直接抛出它而不处理它。
- 在捕获块中,我们将使用 console.log() 方法来处理前一个方法中捕获的错误,稍后我们将看到错误处理消息而不是警告错误。
JavaScript
<script>
let errorThrownFunction = () => {
return new Promise((resolve, reject) => {
reject("Connection Failed!!..");
});
};
let errorHandlerMethod = async () => {
try {
let result = await errorThrownFunction();
console.log(result);
} catch (error) {
console.log(error);
}
};
errorHandlerMethod();
</script>
输出结果:
Connection Failed!!..