Promise Chaining 和 Aync/await 有什么区别

promise chaining 和 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 有什么区别的详细内容,更多请关注硕下网其它相关文章!