一、概要如是说
javaScript中抒发式第一类与示例第一类抒发式第一类: 将抒发式做为第一类采用时, 全称为抒发式第一类;示例第一类: new 抒发式造成的第一类, 全称为第一类。2. 反弹抒发式的展开分类
并行反弹: 立刻继续执行, 全然继续执行完了才完结, 不能放进反弹堆栈中。比如:字符串结点有关的反弹抒发式 / Promise的excutor抒发式;触发器反弹: 不能立刻继续执行, 会放进反弹堆栈中今后继续执行。比如: 计时器反弹 / ajax反弹 / Promise的成功|失败的反弹。3. JS中的Error
严重错误的类别Error: 大部份严重错误的父类别
ReferenceError: 提及的表达式不存有
TypeError: 正则表达式不恰当的严重错误
RangeError: 统计数据值无此其所容许的范围内
SyntaxError: 句法严重错误严重consequences捕捉严重错误: try … catch
放出严重错误: throw error严重错误对象message特性: 严重错误有关重要信息
stack特性: 抒发式初始化栈历史记录重要信息二、对Promise的认知和采用
Promise是甚么?抽象化抒发:Promise是JS中展开触发器程式设计的捷伊软件系统(旧的是谁?);具体内容抒发:从句法上而言: Promise是两个构造抒发式;
为resolved,pending转变成rejected。 promise的基本上业务流程promise基本上时序2. 为何要用Promise?
选定反弹抒发式的形式更为灵巧: 能在允诺收到即使完结后选定反弹抒发式;全力支持拉艾初始化,能化解反弹冥界难题。3. 怎样采用Promise?
主要APIPromise构造抒发式: Promise (excutor) {}
Promise.prototype.then方法: (onResolved, onRejected) => {}
Promise.prototype.catch方法: (onRejected) => {}
Promise.resolve方法: (value) => {}
Promise.reject方法: (reason) => {}
Promise.all方法: (promises) => {}
Promise.race方法: (promises) => {}4. 几个重要难题
怎样改变promise的状态?只能采用resolve和reject,有且只能改变一次状态,状态一旦改变将无法返回。两个promise选定多个成功/失败反弹抒发式, 都会初始化吗? 只会初始化第两个成功/失败的反弹抒发式。promise.then()返回的新promise的结果状态由甚么决定? 在then()返回的新promise结果状态主要由then中的反弹抒发式决定:
(1) 返回两个常量,如return 2,则返回的新promise始终为resolved状态,且会接收返回的常量;
(2) 返回两个new promise,则状态由new promise的状态决定;
(3) 放出两个erro,则状态为rejected状态,采用catch展开捕捉。5. 思考难题
改变promise状态和选定反弹抒发式谁先谁后?promise怎样串连多个操作任务?promise异常传(穿)透?中断promise链返回两个没有完结状态的promise?三、自定义Promise
定义整体结构;Promise构造抒发式的实现;promise.then()/catch()的实现;Promise.resolve()/reject()的实现;Promise.all/race()的实现;Promise.resolveDelay()/rejectDelay()的实现;ES6 的class版本。四、async与await
async 抒发式抒发式的返回值为promise第一类;promise第一类的结果由async抒发式继续执行的返回值决定。2. await 抒发式
await右侧的抒发式一般为promise第一类, 但也能是其它的值;如果抒发式是promise第一类, await返回的是promise成功的值;如果抒发式是其它值, 直接将此值做为await的返回值。3. 注意事项:
await必须写在async抒发式中, 但async抒发式中能没有await;如果await的promise失败了, 就会放出异常, 需要通过try…catch来捕捉处理。五、JS触发器之宏堆栈与微堆栈
宏列队: 用来保存待继续执行的宏任务(反弹), 比如: 计时器反弹/DOM事件反弹/ajax反弹;微列队: 用来保存待继续执行的微任务(反弹), 比如:promise的反弹/MutationObserver的反弹;JS继续执行时会区别这2个堆栈JS引擎首先必须先继续执行大部份的初始化并行任务代码;每次准备取出第两个宏任务继续执行前,都要将大部份的微任务两个两个取出来继续执行。六、Promise的限制操作
上述限制操作中,在_createTask继续执行中,可将简洁写法修改为(将promise中结果向上放出):