promise有三个状态:
- pending[待定]初始状态
- fulfilled[实现]操作成功
- rejected[被否决]操作失败
状态只能从pending到resolved或rejected,一旦改变了,就凝固了,不可改变,之后触发then、catch后续操作。
1->2当前promise的值:
- new Promise时,通过resolve(val)
- promise.then时,则是通过return(ps:没有显式return时是默认return undefined)
1->3当前promise的值:reject(val),和上面相同
promise.prototype.then
- then可以接收两个参数,参数可以选填
- then可以多次调用,按顺序调用,且每次得到的promise的状态值是相同的,会返回一个全新的promise实例(链式调用)
- then会在当前宏任务下形成一个微任务
解析宏任务和微任务的执行
- 没有任何的promise.then和setTimeout,按顺序执行(一个宏任务:主线)
- 出现promise.then,在当前宏任务下,生成一个微任务
- 出现setTimeout,添加多一个宏任务,重复条件1