首页 >web前端 >js教程 >Promise Chaining 和 Aync/await 有什么区别

Promise Chaining 和 Aync/await 有什么区别

Linda Hamilton
Linda Hamilton原创
2024-11-16 15:47:02352浏览

Qual a diferença de Encadeamento de Promises e Aync/await

今天,我对这两种处理异步操作的方式之间的区别一无所知,所以我决定阅读和研究写这篇文章 - 作为对自己的提醒而且,谁知道呢,也许可以帮助其他开发人员更好地理解这种差异。

当时我或多或少知道如何解释,他们都是做同样的事情,then()带来的是解析后的数据,而resolve和reject则用来以成功或错误结束。 async/await 必须等待结果才能继续下一步。这并不完全错误,但可以用更好的方式来解释。

承诺

Promise,顾名思义,就是一个数据返回的“promise”,会经历三个主要状态:

  1. Pending:初始状态,当 Promise 尚未解决或拒绝时。
  2. 已完成:操作已成功完成。
  3. 已拒绝:操作失败,错误被捕获。
const minhaPromise = new Promise((resolve, reject) => {
  let sucesso = true; // Apenas um exemplo condicional

  if (sucesso) {
    resolve("Operação concluída com sucesso!");
  } else {
    reject("Ocorreu um erro na operação.");
  }
});

承诺链

这是在 async/await 之前处理 Promise 的最常见方式。我们使用 then()、catch() 和 finally() 方法。

  • then():用于接收并操作解析成功的数据。
  • catch():用于处理promise被拒绝时的错误。
  • finally():用于执行代码,无论结果如何。
minhaPromise
  .then((mensagem) => {
    console.log(mensagem); // "Operação concluída com sucesso!"
  })
  .catch((erro) => {
    console.error(erro); // Se der erro, isso será executado.
  })
  .finally(() => {
    console.log("Finalizando a execução da Promise"); // Sempre será executado.
  });

异步/等待

标记为 async 的函数会自动返回 Promise,而 await 用于“暂停”执行,直到 Promise 得到解决。

async function buscarDados() {
  try {
    const response = await fetch("https://jsonplaceholder.typicode.com/todos/1");
    const data = await response.json();
    console.log("Dados recebidos:", data);
  } catch (error) {
    console.error("Erro ao buscar dados:", error);
  }
}

buscarDados();

区别

Promise 链会导致代码变得非常嵌套,尤其是当我们连续使用多个 then() 时,使阅读变得更加困难。

Async/await 允许您以更类似于同步代码的方式编写异步代码,使逻辑更易于阅读和理解。代码变得更加清晰,尤其是当我们需要处理多个异步操作时。

此外,使用 try/catch 和 async/await 来处理错误的方式比仅在 Promises 中使用 catch 更直观。

以上是Promise Chaining 和 Aync/await 有什么区别的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn