1.什么是promise的链式调用?
使用then函数返回新的Promise对象特性,一直串联下去
2.then回调函数中,return的值会传给哪里?
传给then函数生成的新Promise对象
3.Promise链式调用有什么用?
解决回调函数嵌套的问题。
1.什么是回调函数地狱?
在回调函数一直向下嵌套回调函数,形成了回调函数地狱
2.回调函数地狱问题
可读性差
异常捕获困难
耦合性严重
async函数和await
定义:async函数是使用async关键字声明的函数,async函数是AsuncFunction构造函数的实例,并且其中允许使用await关键字。async和await关键字让我们可以使用一种更简洁的方式写出基于Promise的异步行为,而无需刻意地链式调用Promise。
async函数和await 捕获错误:
try...catch 1.try中包裹着可能产生错误的代码 2.接着调用catch模块,接收错误信息,如果try里某行代码报错后,try中剩余的代码不会执行了
时间循环 (evrnt loop)
概念:JavaScript有一个基于事件循环的并发模型,事件循环负责执行代码、收集和处理时间以及执行队列中的子任务。这个模型与其他语言中的模型截然不同,比如C和Java。
原因:JavaScript单线程(某一刻只能执行一行代码),为了让耗时代码不阻塞其它代码运行,设计了事件循环模型
定义:执行代码和收集异步任务的模型,在调用栈空闲时,反复调用任务队列里回调函数的执行机制,就叫事件循环
1.什么是时间循环?
执行代码和收集异步任务,在调用栈空闲时,反复调用任务队列里回调函数执行机制
2.为什么有时间循环?
JavaScript是单线程的,为了不阻塞JS引擎,设计执行代码的模型
3.JavaScript内代码如何执行?
执行同步代码,遇到异步代码交给宿主浏览器环境执行
异步有了结果后,把回调函数放入任务队列排队
当调用栈空闲后,反复调用任务队列里的回调函数
宏任务与微任务
ES6之后引入了Promise对象,让JS引擎也可以发起异步任务
异步任务分为:
宏任务:由浏览器环境执行的异步代码
微任务:由JS引擎环境执行的异步代码
1.什么是宏任务?
浏览器执行的异步代码
例如:JS执行脚本事件,setTimeout/setInterval,AJAX请求完成事件,用户交互事件等
2.什么是微任务?
JS引擎执行的异步代码
例如:Promise对象.then()的回调
3.JavaScript内代码如何执行?
执行第一个script脚本事件宏任务,里面同步代码
遇到宏任务/微任务交给宿主环境,有结果回调函数进入对应队列
当执行栈空闲时,清空微任务队列,再执行下一个宏任务,从1再来