模块一作业

99 阅读2分钟

Js异步编程:Js异步编程的首要任务就是来提高JS单线程执行机制下的处理效率的,针对一些耗时操作及宿主环境下的api交互, 例如接口的请求调用,文件的读写操作,消息发送及接收,通过异步编程的方式,都能得到很好的提升。

常用的JS异步编程的处理方式有回调函数、事件、Promise、Generator、Async Await。

EventLoop、消息队列、宏任务、微任务都是支持JS异步工作的主要内容。

在JS引擎执行一段代码的过程中,主要会经历几个阶段:
读取代码=>
压入执行栈=>
执行栈处理各个任务=>
遇到同步任务,处理完,排出执行栈,=>
遇到异步任务,执行栈处理完后,会委托宿主环境去执行任务,约定执行后,再将与这个任务的执行结果通过之前约定好的回调函数注册到消息队列=>
当执行栈的任务已经执行完成,空闲时=>
通过EventLoop会监测到,此时便将消息队列中的任务压入执行栈,逐个执行。

宏任务是消息队列里的任务,常见的接口请求、定时器等异步任务都是宏任务。
微任务是基于当前任务产生而随当前任务结束后立即执行的任务,所以也是异步任务, 但是不需要通过EventLoop监测,通过消息队列取出并压入执行栈中再执行; 像通过Promise、

MutationObserver、process.nextTick产生的任务都为微任务。

代码题

一、将下面异步代码使用promise方式改进

setTimeout(function() {    var a = 'hello';    setTimeout(function() {        var b = 'lagou';        setTimeout(function() {            var c = 'I ❤ U';            console.log(a + b + c);        }, 10);    }, 10);}, 10);

改进

二、

三、

四、手写实现MyPromise的源码