#promise
promise 在实例化时传入函数会立即执行,
then(...)中的回调需要异步延迟调用
##回调函数异步调用的时机
onFullfiled或者onReject只在执行环境堆栈仅包含平台代码时才可被调用。
实践中要保证
onFullfiled和onRejected方法异步执行。且要在
then方法被调用的那一轮事件循环之后的新执行栈中执行这个事件队列可以采用宏任务macro-task机制或者
micro-task机制来执行
promise A+没有指出是以microtask还是macrotask形式放入队列,但是,Ecmascript规范明确指出:
Promise必须以Promise Job形式加入job queue(microtask),job queue 是ES6新提的概念job queue 也满足了一些低延迟的异步操作微任务和宏任务 的执行顺序: 在挂起任务时候,
JS引擎会将所有任务按照类别分到两个队列之中,首先在宏任务队列中取出第一个任务.执行完毕后取出微任务队列中的所有任务顺序执行完毕。之后再取出宏任务。周而复始,直至两个队列的任务都执行完毕。
常见的微任务和宏任务:宏任务:整体的script,setTimeout,setInterval,setImmediate,requestAnimationframe请求动画桢
微任务:process.nextTick,MutationObserver,Promise.then,catch finaly
主进程> 微任务> 宏任务
JS 的运行机制
js的运行机制 进入整体代码(宏任务)后,开始第一次循环。接着执行所有的微任务。然后再次从宏任务开始,找到其中一个任务队列执行完毕,再执行所有的微任务。