JavaScript 如何防止Promise吞噬错误

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);
    });

输出:

JavaScript 如何防止Promise吞噬错误

现在,如我们所见在上面图像的输出中,错误被抛出,因此承诺被拒绝,但我们可能不希望发生这种情况,所以我们的一种方法可以是使用一个处理程序函数,它在接收到前一个.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);
    });

输出:

JavaScript 如何防止Promise吞噬错误

正如我们所见,这种实现一个处理程序函数的方法似乎没有给我们正确的结果,因此在接收到错误后我们可能需要使用.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);
    });

输出:

JavaScript 如何防止Promise吞噬错误

这个方法很好用,不会拒绝我们为执行声明的承诺,而是实际上履行了这个承诺,成功地打印出了错误消息,而不会崩溃代码。

注意: 我们可能已经看到了成功地防止承诺吞没错误(在上面的代码片段中),但是我们不可能每次都能在每个具有错误的.then()方法后面链接.catch()。因此,在项目中工作时,我们首先必须安装 Bluebird ,这是一个最流行的Promise库,它有一个内置的方法(名为onRejection handler),还有一个默认处理程序(称为unhandledRejection),这有助于我们处理完整的代码片段中的未处理的拒绝。一旦我们实现了这段代码,就不需要再担心未处理的异常了。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程