Promise Chaining 和 Aync/await 有什么区别
今天,我发现自己对这两种处理异步操作的方式之间的差异一无所知,所以我决定阅读和研究写这篇文章 - 作为对自己的提醒,谁知道呢,也可以帮助其他开发人员理解这个差异更好。
当时我或多或少知道如何解释,他们都是做同样的事情,then()带来的是解析后的数据,而resolve和reject则用来以成功或错误结束。 async/await 必须等待结果才能继续下一步。这并不完全错误,但可以用更好的方式来解释。
承诺
promise,顾名思义,就是一个数据返回的“promise”,会经历三个主要状态:
- pending:初始状态,当 promise 尚未解决或拒绝时。
- 已完成:操作已成功完成。
- 已拒绝:操作失败,错误被捕获。
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 有什么区别的详细内容,更多请关注硕下网其它相关文章!