首页 > 其他分享 >Promise 和 Async/Await 到底有啥区别?

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

时间:2023-12-05 10:23:51浏览次数:35  
标签:异步 await console log Await Promise async Async

在 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 函数的执行将恢复,并返回承诺的结果。如果被拒绝,则会引发错误值。

 更多内容请点

标签:异步,await,console,log,Await,Promise,async,Async
From: https://www.cnblogs.com/cybozu/p/17876613.html

相关文章

  • asyncio协程库实现原理剖析
    目录迭代器可迭代对象&迭代器自定义迭代器生成器生成器就是迭代器生成器的4个状态用yield重构迭代器生成器三种应用场景生成器进阶函数运行机制函数对象和代码对象函数运行帧同步和异步协程yield表达式yield表达式的优先级send()用法yield表达式作为函数入参使用close()结束生成......
  • 深入理解Async/Await:从原理到实践的JavaScript异步编程指南
    理解async/await的原理和使用方法是理解现代JavaScript异步编程的关键。这里我会提供一个详细的实例,涵盖原理、流程、使用方法以及一些注意事项。代码注释会尽量详尽,确保你理解每个步骤。实例:使用async/await进行异步操作<!DOCTYPEhtml><htmllang="en"><head><metacha......
  • react项目vite报错:UnhandledPromiseRejectionWarning: SyntaxError: Unexpected toke
    问题:vite报错:UnhandledPromiseRejectionWarning:SyntaxError:Unexpectedtoken'??='今天clone一个vite的项目,安装依赖后运行npmrundev报错:UnhandledPromiseRejectionWarning:SyntaxError:Unexpectedtoken'??='atLoader.moduleStrategy(internal/modules......
  • ES6 async
    asyncasync函数总返回的是一个Promise对象(不论是否有return语句)。async函数内部的return语句返回的值,作为then()回调函数的参数。async函数内部抛出的错误,返回的Promise对象变为reject状态,错误会被catch捕获到。只有async函数内部的异步操作执行完,才......
  • ES6 Promise
    Promise一个容器,一个保存着某个未来才会结束的事件的结果。有三种状态:pending(进行中)、fulfilled(已成功)和rejected(已失败)。一旦状态改变,就不会再变。constp=newPromise((resolve,reject)=>{resolve("ok")thrownewError("报错啦")})p.then(res=>consol......
  • 基于WSAAsyncSelect模型的通信程序设计
    基于WSAAsyncSelect模型的通信程序设计一、问题描述编写Win32程序模拟实现基于WSAAsyncSelect模型的两台计算机之间的通信,要求编程实现服务器端与客户端之间双向数据传递。客户端向服务器端发送“请输出从1到1000内所有的质数”,服务器回应客户端给出结果。二、代码实现①CInit......
  • C++标准库函数std::async
    1、std::asyncstd::async是C++11的标准库函数,用于创建执行异步任务并返回std::future对象来获取异步执行的结果状态。该函数最简单的用法如下所示:#include<iostream>#include<thread>#include<future>std::stringpromise_string(){for(inti=0;i<200;......
  • std::future与std::promise在C++多线程同步与数据共享中的应用
    1、std::promise与std::futurestd::promise与std::future通过配合使用完成数据的同步与共享,两者均是模板类;std::promise存储异步执行的值或异常;std::future提供可供访问的异步执行结果。二者配合使用伪码如下:std::promise<Type>pr;std::future<Type>fu(pr.get_fu......
  • Promise.all并行请求案例
    if(dealFileList.value&&topicFileList.value&&accountFileList.value){state.btnLoading=true;const[res01,res02,res03]=awaitPromise.all([handleImportFile(dealFileList.value,'/economic/econo......
  • 【Python】async与await用法
    async用于修饰函数,将普通函数变为异步函数。asyncdeft2():print(2)直接调用异步函数不会返回结果,而是返回一个协程对象。协程需要通过其他方式来驱动,如async.run函数。await函数只能在异步函数中使用,可以通过该关键字,挂起当前协程,让另一个协程执行完毕,再次执行本协程......