Promise 和 Async/Await 到底有啥区别?

在 JavaScript 中,promise 和 async/await 是处理异步操作的两种不同方式。但它们是密切相关的。

promise 是最终导致异步操作完成或失败的对象。承诺可以处于以下三种状态之一:挂起、已履行或拒绝。异步操作完成后,承诺要么以值实现,要么因错误而被拒绝。

// Using Promises
function promiseFunction() {
  return  new Promise((resolve, reject) => {
  setTimeout(() => {
    resolve("Resolved");
  }, 2000);
})
}
console.log("Start");
promiseFunction()
.then((result) => {
  console.log(result);
  console.log("End");
})
.catch((error)=>{
console.log(error)
});
Output:
Start
Resolved
End

Async/await 是 promise 之上的语法糖。它提供了一种更简洁的异步代码编写方法,使其更易于读取和编写。使用 Async/Await,您可以编写类似于同步代码的异步代码,并且它在后台使用承诺。

在 async/await 中, async 关键字用于声明异步函数。关键字 await 用于等待承诺解析,然后再继续执行函数。关键字 await 只能在 async 函数中使用。

// Using Async/Await
async function asyncFunction() {
  try {
    console.log("Start");
    const promise = new Promise((resolve, reject) => {
      setTimeout(() => {
        resolve("Resolved");
      }, 2000);
    });
    const result = await promise;
    console.log(result);
    console.log("End");
  } catch (error) {
    console.error(error);
  }
}
asyncFunction()
output:
Start
Resolved
End

唯一的区别是 promise 和 async/await 之间的执行上下文。

创建承诺并启动异步操作时,创建承诺后的代码将继续同步执行。当 Promise 被解析或拒绝时,附加的回调函数将添加到微任务队列中。微任务队列在当前任务完成后但在从任务队列处理下一个任务之前进行处理。这意味着创建 Promise 之后的任何代码都将在执行附加到 Promise 的回调函数之前执行。

另一方面,对于 Async/Await, await 关键字会导致 JavaScript 引擎暂停 async 函数的执行,直到 Promise 被解析或拒绝。当 async 函数等待 Promise 解析时,它不会阻止调用堆栈,并且可以执行任何其他同步代码。解析承诺后, async 函数的执行将恢复,并返回承诺的结果。如果被拒绝,则会引发错误值。

更多内容请点👉:开发者网站讨论社区

  • 9
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值