📜  解释 Node.js 中的一些错误处理方法

📅  最后修改于: 2022-05-13 01:56:31.798000             🧑  作者: Mango

解释 Node.js 中的一些错误处理方法

Node.js 是一个开源的 JavaScript 运行时环境。它通常在服务器端用于为 Web 和移动应用程序构建 API。 Netflix、Paypal、Uber 等大量公司使用 Node.js。

先决条件:

  • 承诺
  • 异步等待

错误是程序由于逻辑、语法、超时等多种因素而出现的任何问题。错误处理是 Node.js 的重要组成部分,应谨慎实施。在本教程中,让我们看看一些处理错误的方法,但首先让我们设置我们的基本环境。

创建一个名为 error.js 的文件。该文件将作为探索各种方法的基础。

方法 1:使用 try-catch 块。

catch 块处理由 try 块中的代码引发的任何异常。

句法:

try{
    // Code
}catch(error){
    // Error Handling
}

例子:

Javascript
try{
    const areYouAwesome = false;
    if(!areYouAwesome){
        throw new Error("We know you are awesome, 
                       we are having troubing with our code.")
    }
}catch(error){
    console.log(error.message);
}


Javascript
const delay = (wait) => {
    return new Promise(resolve => setTimeout(resolve, wait));
}
  
const awesomeFunction = async () => {
    try{
        await delay(2000)
        throw new Error("Error thrown after delay");
    }catch(error){
        console.log(error.message);
    }
}
  
awesomeFunction();


Javascript
const awesomeFunction = (isAwesome) => {
    return new Promise((resolve, reject) => {
        if(isAwesome){
            resolve("You are awesome");
        }else{
            reject("We know you are awesome, 
                   we are having troubing with our code.")
        }
    })
} 
  
awesomeFunction(false).then((message) => {
    console.log(message);
}).catch((error) => {
    console.log(error)
});


Javascript
process.on('uncaughtException', error => {
    console.log(error.message);
    process.exit(1) 
})  
  
const awesomeFunction = (isAwesome) => {
    if(!isAwesome){
        throw new Error("We know you are awesome, 
                     we are having troubing with our code.")
    }
} 
  
awesomeFunction();


输出:

We know you are awesome, we are having troubing with our code.

方法2:在执行异步操作时使用try-catch

异步操作有时需要在检索数据时暂停程序。我们可以将 async-await 函数与 try-catch 块配对来处理错误。

句法:

const myFunction = async () => {
    try{
        await operationWhichTakesTime()
    }catch(error){
        // Error handling
    }
}

例子:

Javascript

const delay = (wait) => {
    return new Promise(resolve => setTimeout(resolve, wait));
}
  
const awesomeFunction = async () => {
    try{
        await delay(2000)
        throw new Error("Error thrown after delay");
    }catch(error){
        console.log(error.message);
    }
}
  
awesomeFunction();

输出:

Error thrown after delay

方法 3:使用 Promise

Promise 用于处理 JavaScript 中的异步操作。它们是 Promise 的三个状态,即未决状态、已解决状态和已拒绝状态。在挂起状态下,promise 正在等待某个其他函数或某些数据被检索。在已解决的状态下,该函数已按预期工作并且承诺已解决。在拒绝状态下,函数中出现了一些错误,并且 promise 被拒绝。

句法:

promise().then((data) => {
    // Code
}).catch((error) => {
    // Error handler
})

例子:

Javascript

const awesomeFunction = (isAwesome) => {
    return new Promise((resolve, reject) => {
        if(isAwesome){
            resolve("You are awesome");
        }else{
            reject("We know you are awesome, 
                   we are having troubing with our code.")
        }
    })
} 
  
awesomeFunction(false).then((message) => {
    console.log(message);
}).catch((error) => {
    console.log(error)
});

输出:

We know you are awesome, we are having troubing with our code.

方法 4:使用事件监听器

Node.js 中的进程全局对象可用于侦听程序中可能出现的任何未捕获的异常。

句法:

process.on('uncaughtException', error => {
    // Error Handling
    process.exit(1)
})

例子:

Javascript

process.on('uncaughtException', error => {
    console.log(error.message);
    process.exit(1) 
})  
  
const awesomeFunction = (isAwesome) => {
    if(!isAwesome){
        throw new Error("We know you are awesome, 
                     we are having troubing with our code.")
    }
} 
  
awesomeFunction();

输出:

We know you are awesome, we are having troubing with our code.