什么是异步,以及实现原理

同步:同步是指一个任务一个任务的去执行,当一个任务未执行完毕时不会去执行第二个任务。

异步:异步与同步相反,当js引擎检测到某操作为异步操作的时候,则会把该任务先挂起,继续执行后面的代码,并不会等到该操作结束后再执行后面代码。

为什么要使用异步?

js是单线程程序,只能在js引擎的主线程上运行,所以代码只能一行一行的执行,假如要执行某任务需要2s,则这时2s结束后才会执行其他操作,为了防止不必要的时间的消耗就需要用到异步操作。

实现异步有很多种方式,setTimeout是其中的一种,例如:

setTimeout(function fun(){
    console.log('a');
}, 2000);

console.log('b');

最后结果是,先打印b再打印a。由于setTimeout是异步操作,所以并不会按照代码顺序去执行先打印a两秒后再打印b。

除开setTimeout之外,还可以使用PromiseGeneratorasync/await 等等方法去实现异步操作。

执行顺序

js进行解析执行代码的时候,会被引擎分为同步任务和异步任务,而异步任务又分为宏任务和微任务,而代码的执行顺序则是:同步任务>微任务>宏任务

微任务:例如Promise的then、nextTick、async的await等

宏任务:例如定时器setTimeout、点击事件、ajax等

实际操作

<script type="text/javascript">

    setTimeout(() => {
	    console.log('第一个宏任务');
		Promise.resolve().then(() => {
		    console.log('第一个宏任务中的微任务');
		});
	 }, 0);

	 setTimeout(() => {
	     console.log('第二个宏任务');
	 }, 0);

	 Promise.resolve().then(() => {
         console.log('微任务');
     });

    console.log('同步任务');

</script>

打印结果:1.同步任务  2.微任务 3.第一个宏任务  4.第一个宏任务中的微任务  5.第二个宏任务

同步和异步实现原理

同步:js解析执行时,同步任务会被推到执行栈按照顺序进行执行。

异步:js解析执行时,异步任务会被放进任务队列当中,等待js引擎去执行。

  • 11
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值