📜  处理异步代码时如何处理错误?

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

处理异步代码时如何处理错误?

Node.js 中的异步代码是不会阻塞其后代码执行的代码。在同步代码中,代码等待进一步的代码执行,直到当前操作未完成并从上到下执行,而在异步代码中,异步代码在单独的线程中执行,因此不会阻塞进一步代码的执行,因此它们两者同时执行。要更深入地了解异步编程,请参阅异步代码如何在 JavaScript 中工作?

现在让我们讨论如何处理异步代码中的错误。

使用回调:回调函数是作为异步函数中的最后一个参数传递的函数,并且在异步函数执行时函数回调。任何回调函数中的第一个参数是错误对象,因此它们通常被称为错误优先回调。如果没有错误,则错误对象为空,否则它将包含有关错误的信息。

示例:在下面的示例中,我们使用 setTimeout 方法使我们的 mod函数异步。如果 b 为零,我们会传递一条错误消息“不允许模零”,否则我们会记录结果。这样,每次调用 mod函数时,我们的回调都会处理错误。

Javascript


Javascript


Javascript


输出:

The result is 1
Modulo zero is not allowed

但是当我们使用回调方法时,我们有时会陷入回调地狱。为了避免这种情况,我们使用下面讨论的Promises

使用 Promises: Promises 使我们能够在 Nodejs 中处理异步操作,而不会陷入回调地狱。一个承诺要么被解决,要么被拒绝。在 promise 被解决或拒绝后,有then()catch()两种方法。如果它被解析,那么 then() 方法中的代码就会被执行,否则我们会通过 catch 块抛出错误。

示例:让我们修改上面的示例并使用 Promise 处理错误。

Javascript


输出:

The result is 1
Modulo zero is not allowed

现在的代码比我们使用回调时更干净。尽管 Promises 使我们能够防止回调地狱,但它们本身具有语法复杂性,因此我们得到了下面讨论的Async函数。

使用 Async/Await: Async/Await 使 JavaScript Promise 更易于使用。它使我们能够使用try-catch块处理错误。要使用 async-await,我们只需要创建一个异步函数,我们将在其中实现我们的 try-catch 块。在 try 块中,我们将等待我们的承诺完成。如果它得到解决,我们将得到结果,否则将通过 catch 块抛出错误。 Await 只能在异步函数或异步回调或异步箭头函数内部使用。

例子:

Javascript


输出:

The result of division is 1
Modulo zero is not allowed