promise和async的作用和区别

您所在的位置:网站首页 spot的用法与搭配 promise和async的作用和区别

promise和async的作用和区别

2023-07-06 11:16| 来源: 网络整理| 查看: 265

promise和async的作用和区别

今天遇到了一个对我来说比较抽象的问题promise和async 在使用的时候虽会使用,但是对它们两的概念还是有些模糊滴😟

promise

promise不能返回表达式的箭头函数中设置的断点,如果在.then中设置断点,使用Step Over快捷键,调试器是不会跳到下一个.then中的,因为promise只会跳过异步代码

async

async要搭配着await使用,它们能够使得代码调试更简单 使用它们两时,不再需要那么多箭头函数,这样就可以像调试同步代码一样跳过await语句。 注意以下几点:

若它等到的不是一个promise对象,那么await表达式的运算结果就是它要等的结果。若他等到的是一个promise对象,这个时候就要注意了,await就会忙起来了,它会阻止后面代码的执行,等着promise对象resolve,然后得到resolve的值,最后作为await表达式的运算结果

两者区别

async/await代码看起来相对比较简洁一些,使得异步代码看起来像同步代码async/await和promise一样,是非阻塞的async/await是基于promise来实现的,可以说是改良过的promise,它不能用于普通的回调函数

下面看一些案例来了解一下

(以下代码执行的顺序和原因)

async function async1 () { console.log('async1 start') - 2.async1 start await async2(); console.log('async1 end') - 6.async1 end } // 异步 async function async2 () { console.log('async2') - 3.async2 } // 异步 console.log('script start') - 1.script start setTimeout(function () { console.log('setTimeout') - 8.setTimeout }, 0) async1(); new Promise (function (resolve) { console.log('promise1') - 4.promise1 resolve(); }).then (function () { console.log('promise2') - 7.promise2 }) console.log('script end') - 5.script end

原因:

先执行同步代码,前面都是定义函数到console.log(‘script start’) 开始执行,setTimeout(function ()是异步,放到库中同步代码执行到async1();先执行console.log(‘async1 start’)async1()继续执行await async2();console.log(‘async2’),但是await后面要跟着promise所以继续往下执行,执行console.log(‘promise1’) ,then()是异步代码放到库中代码继续往下执行,同步代码执行到console.log(‘script end’)结束异步代码,先执行微任务,所以先执行console.log(‘async1 end’)然后再执行then()函数 console.log(‘promise2’)最后执行异步代码定时器,console.log(‘setTimeout’)

以上就是目前所了解的内容啦~各位路过的大神有其它的高见麻烦教一下噢╰(°▽°)╯(还是不太懂这个ಥ_ಥ)



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3