JavaScript 如何防止Promise吞噬错误
在本文中,我们将尝试了解如何使用JavaScript提供的几种预定义技术来防止Promise吞噬错误。
在深入讨论主要关注的话题之前,让我们快速了解如何使用以下语法声明一个Promise。
语法:
let promise = new Promise((resolve, reject) => {
...
});
示例1: 以下的代码片段将帮助我们更好地理解promise声明:
Javascript
let promise = new Promise((resolve, reject) =>{
resolve("Hello GeeksforGeeks")
});
promise.then(result => console.log(result));
输出:
Hello GeeksforGeeks
现在让我们来看一下我们的问题陈述,我们必须防止承诺吞噬错误。考虑以下代码片段(代码示例),其中演示了一个场景(基于实时工作),我们在之后实现了.then()方法的链接。
现在,如果我们传入一些在代码片段中没有声明的参数,那么我们的承诺将捕获错误(作为引用错误),并立即丢弃(或拒绝)承诺,从而导致代码崩溃。
示例2: 请查看以下代码片段:
Javascript
let promise = new Promise((resolve, reject) => {
resolve();
});
promise
.then(function () {
console.log("GeeksforGeeks");
})
.then(function () {
console.log("Hello ", someRandomText);
});
输出:
现在,如我们所见在上面图像的输出中,错误被抛出,因此承诺被拒绝,但我们可能不希望发生这种情况,所以我们的一种方法可以是使用一个处理程序函数,它在接收到前一个.then()方法的错误后进行链接。
示例3: 请查看下面的代码片段
Javascript
let promise = new Promise((resolve, reject) => {
resolve();
})
promise
.then(function () {
console.log("GeeksforGeeks");
})
.then(function () {
console.log("Hello ", someRandomText);
}, function (error) {
console.log("Promise rejected, error message : ", error);
});
输出:
正如我们所见,这种实现一个处理程序函数的方法似乎没有给我们正确的结果,因此在接收到错误后我们可能需要使用.catch()方法。
例子 4: 查看下面的代码片段
Javascript
let promise = new Promise((resolve, reject) => {
resolve();
})
promise
.then(() => {
console.log("GeeksforGeeks");
})
.then(() => {
console.log("Hello", someRandomText);
})
.catch((error) => {
console.log("Promise rejected,
error message : ", error);
});
输出:
这个方法很好用,不会拒绝我们为执行声明的承诺,而是实际上履行了这个承诺,成功地打印出了错误消息,而不会崩溃代码。
注意: 我们可能已经看到了成功地防止承诺吞没错误(在上面的代码片段中),但是我们不可能每次都能在每个具有错误的.then()方法后面链接.catch()。因此,在项目中工作时,我们首先必须安装 Bluebird ,这是一个最流行的Promise库,它有一个内置的方法(名为onRejection handler),还有一个默认处理程序(称为unhandledRejection),这有助于我们处理完整的代码片段中的未处理的拒绝。一旦我们实现了这段代码,就不需要再担心未处理的异常了。