Node.js Promise和async await的区别

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()方法中的代码始终会执行一次。

示例:

<script>
  const promise = new Promise(function (resolve, reject) {
    const string1 = "geeksforgeeks";
    const string2 = "geeksforgeeks";
    if (string1 === string2) {
      resolve();
    } else {
      reject();
    }
  });
 
  promise
    .then(function () {
      console.log("Promise resolved successfully");
    })
    .catch(function () {
      console.log("Promise is rejected");
    });
</script>
JavaScript

输出:

Promise resolved successfully
JavaScript

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() 方法中的代码。

示例:

<script>
  const helperPromise = function () {
    const promise = new Promise(function (resolve, reject) {
      const x = "geeksforgeeks";
      const y = "geeksforgeeks";
      if (x === y) {
        resolve("Strings are same");
      } else {
        reject("Strings are not same");
      }
    });
 
    return promise;
  };
 
  async function demoPromise() {
    try {
      let message = await helperPromise();
      console.log(message);
    } catch (error) {
      console.log("Error: " + error);
    }
  }
 
  demoPromise();
</script>
JavaScript

输出:

Strings are same
JavaScript

承诺和异步/等待之间的区别:

序号 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链更容易理解。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

登录

注册