📜  Node.js 中的 promise 和 async await 的区别

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

Node.js 中的 promise 和 async await 的区别

在 NodeJS 或 JavaScript 中有不同的方法来处理操作。对于异步执行,不同的进程同时运行,并在每个进程的结果可用时进行处理。在 NodeJS 或 JavaScript 中有不同的方法来处理异步代码,它们是:

  • 回调
  • 承诺
  • 异步/等待

一、承诺:

NodeJS 中的 Promise 类似于现实生活中的 Promise。这是对某事会完成的保证。 Promise 用于跟踪异步事件是否已执行,并确定事件发生后会发生什么。它是一个具有 3 种状态的对象,即:

  • 待定:事件发生之前的初始状态。
  • 解决:操作成功完成后。
  • Rejected:如果操作在执行过程中出错,则 Promise 失败。

示例:从数据库服务器请求数据时,Promise 处于挂起状态,直到接收到数据。如果数据接收成功,则Promise处于resolved状态,如果无法成功接收数据,则Promise处于rejected状态。

Promise的错误处理:对于成功解决的 Promise,我们使用 .then() 方法,对于被拒绝的 Promise,我们使用 .catch() 方法。要在使用 .then() 或 .catch() 方法处理 promise 后运行代码,我们可以使用 .finally() 方法。 .finally() 方法中的代码运行一次,无论 promise 的状态如何。

例子:

Javascript


Javascript


输出:

Promise resolved successfully

2.异步/等待:

Async/Await 用于处理异步函数中的 Promise。它基本上是 promise 的语法糖。它只是重新设计代码并使 Promise 更易于阅读和使用的包装器。它使异步代码看起来更像同步/过程代码,更容易理解。

await 只能在异步函数中使用。它用于调用异步函数并等待它解析或拒绝。 await 在它所在的 async函数中阻止代码的执行。

Aysnc/Await 中的错误处理:对于成功解决的 Promise,我们使用 try,对于被拒绝的 Promise,我们使用 catch。要在使用 try 或 catch 处理 promise 后运行代码,我们可以使用 .finally() 方法。 .finally() 方法中的代码运行一次,无论 promise 的状态如何。

例子:

Javascript


输出:

Strings are same

Promise 和 Async/Await 的区别:

Sr.no

Promise

Async/Await

1.Promise is an object representing intermediate state of operation which is guaranteed to complete its execution at some point in future.Async/Await is a syntactic sugar for promises, a wrapper making the code execute more synchronously.
2.Promise has 3 states – resolved, rejected and pending.It does not have any states. It returns a promise either resolved or rejected.
3.If the function “fxn1” is to executed after the promise, then promise.then(fxn1) continues execution of the current function after adding the fxn1 call to the callback chain.If the function “fxn1” is to executed after await, then await X() suspends execution of the current function and then fxn1 is executed.                                
4.Error handling is done using .then() and .catch() methods.Error handling is done using .try() and .catch() methods.
5.Promise chains can become difficult to understand sometimes.Using Async/Await makes it easier to read and understand the flow of the program as compared to promise chains.