Node.js Promise和async await的区别
在Node.js或JavaScript中,处理操作的方式有所不同。对于异步执行,不同的进程同时运行,并在每个进程的结果可用后进行处理。在Node.js或JavaScript中处理异步代码的方式有:
- 回调函数
- Promises
- Async/Await
1. Promises:
在Node.js中的Promise类似于现实生活中的承诺。它是对某事将会发生的保证。Promise用于跟踪异步事件是否已执行,并确定事件发生后发生的情况。它是一个具有3个状态(即待处理、已解决和被拒绝)的对象。
示例: 在从数据库服务器请求数据时,Promise处于待处理状态,直到数据接收到。如果成功接收到数据,则Promise处于已解决状态,如果无法成功接收数据,则Promise处于被拒绝状态。
Promises的错误处理: 对于成功解决的Promise,我们使用.then()方法,对于被拒绝的Promise,我们使用.catch()方法。要在使用.then()或.catch()方法处理Promise后运行代码,我们可以使用.finally()方法。无论Promise的状态如何,.finally()方法中的代码始终会执行一次。
示例:
输出:
2. Async/Await:
Async / Await 用于在异步函数中处理 Promise。它基本上是 Promise 的语法糖。它只是一个编码样式的包装器,可以使 Promise 更易读和使用。它使异步代码看起来更像同步/过程化代码,更容易理解。
await 只能在异步函数中使用。它用于调用异步函数并等待其解决或拒绝。await 阻塞了它所在的异步函数内部的代码执行。
Error Handling in Async/Await:
对于成功解决的 Promise,我们使用 try,对于拒绝的 Promise,我们使用 catch。要在使用 try 或 catch 处理 Promise 后运行一段代码,我们可以使用 .finally() 方法。无论 Promise 的状态如何,都会执行 .finally() 方法中的代码。
示例:
输出:
承诺和异步/等待之间的区别:
序号 | Promise | Async/Await |
---|---|---|
1. | Promise 是一个表示操作中间状态的对象,该操作保证在将来某个时间点完成执行。 | Async/Await 是Promise的语法糖,它使代码更具同步执行的特点。 |
2. | Promise 有三种状态 – 已完成、已拒绝和待定。 | 它没有任何状态。它返回一个已完成或已拒绝的Promise。 |
3. | 如果函数 “fxn1” 在Promise之后执行,则 promise.then(fxn1) 在将fxn1调用添加到回调链后继续执行当前函数。 | 如果函数 “fxn1” 在 await 之后执行,则 await X() 暂停执行当前函数,然后执行 fxn1。 |
4. | 使用.then()和.catch()方法进行错误处理。 | 使用.try()和.catch()方法进行错误处理。 |
5. | Promise链有时会变得难以理解。 | 使用Async/Await使程序的流程更易读和理解,相比Promise链更容易理解。 |