当前位置: 首页 > Web前端 > JavaScript

promise和asyncawait的区别

时间:2023-03-27 16:18:10 JavaScript

两者的概念:Promise基本语法:letp=newPromise((resolve,reject)=>{//...resolve('success')});p.then(result=>{console.log(result);//成功});promise有pending(执行中)、success(成功)、rejected(失败)三种状态链调用错误捕获Promise.prototype.catch用于指定Promise状态变为rejected时的回调函数,可以认为是.then的简写形式,返回值与.then相同})总结:Promise是一种异步编程的解决方案,比传统的解决方案——回调函数和事件——更合理、更强大——简单地说,Promise就像一个容器,里面存放着一些未来(异步)事件的结果,并且一旦这些结果是生成的,不能更改。asyncawait用法async用于声明一个函数是异步的,await可以认为是asyncwait的简写,等待一个异步方法完成。规则:1async和await是成对使用的,await存在于async内部。否则会报错。2await意思是等待一个promise返回这里,然后执行3await后面跟着一个promise对象。{letresult01=awaitsleep(100);//下一句会在上一句await执行完之后执行letresult02=awaitsleep(result01+100);letresult03=awaitsleep(result02+100);//console.log(result03);returnresult03;}demo().then(result=>{console.log(result);});`如果错误捕获处于reject状态,可以使用try-catch捕获letp=newPromise((resolve,reject)=>{setTimeout(()=>{reject('error');},1000);});asyncfunctiondemo(params){try{letresult=awaitp;}catch(e){控制台。日志(e);}}演示();总结:asyncawait也是一种异步编程的解决方案。它遵循Generator函数的语法糖。它有一个内置的执行器,无需额外调用即可自动执行。输出结果,返回一个Promise对象。两者的主要用法和语法不再详述。有兴趣的朋友可以参考es6中文文档来区分两者:Promise的出现解决了传统回调函数带来的“区域回调”问题,但是它的语法导致了。纵向发展形成回调链。在遇到复杂的业务场景时,这样的语法显然是不美观的。asyncawait代码看起来更简洁,让异步代码看起来像同步代码。await的本质是提供等同于等待异步返回能力的“同步效果”的语法糖。只有执行完这行代码,才会执行下一句。asyncawait和Promise一样,是非阻塞的。Asyncawait是基于Promise实现的,可以说是Promise的改进版,不能用于普通的回调函数。(采访)简要区别:1.Promise是ES6,async/await是ES72。与promise相比,async/await写得更优雅。3.拒绝状态:1)Promise错误可以用catch来捕获,建议在最后捕获错误,2)async/await可以用.then和try-catch来捕获。简单的说,除了语法糖的不同,它们解决的问题和达到的效果是相似的。我们可以在不同的应用场景中使用它们,根据自己的喜好选择使用。