-
宿主发起的任务 宏观任务
宏任务可能会执行的代码包括 脚本 模块 函数体JavaScript引擎发起的任务 微观任务
宏观任务中又包含了一个微观任务队列
许多的微观任务队列形成了宏观任务Promise永远在队列尾部添加微观任务 setTimeout等宿主API 添加宏观任务
- 一个感性的认知: JavaScript引擎会常驻于内存中 它等待宿主把JavaScript代码或者函数传递给它执行
JavaScript引擎实际上做的事情就是 不断的 等待 执行 ( node中称为事件循环 )
每一个新的宏任务 就循环一遍
- 一个感性的认知: JavaScript引擎会常驻于内存中 它等待宿主把JavaScript代码或者函数传递给它执行
-
Promise 标准化异步管理方式 总体思想 ( 需要进行io 等待或者其他异步操作的函数 不返回真实结果 而返回一个承诺 函数调用方可以在合适的时机 选择等待这个承诺兑现 )
setTimeout 是属于宿主环境的api 所以是宏观任务
Promise async/await 都是微观任务基本用法:
function sleep(duration){
return new Promise(function(resolve, reject){
setTimeout(resolve, duration);
}
}
sleep(1000).then( ()=> console.log(“finished”));Promise 产生的是JavaScript引擎内部的微任务 setTimeout是浏览器API产生宏任务
var r = new Promise(function(resolve, reject){
console.log(“a”);
resolve()
});
setTimeout(()=>console.log(“d”), 0)
r.then(() => console.log(“c”));
console.log(“b”)
// abcd -
分析异步执行的顺序
首先我们分析有多少个宏任务
在每个宏任务中 分析有多少个微任务
根据调用次序 确定宏任务中的微任务执行次序
根据宏任务的触发规则和调用次序 确定宏任务的执行次序
确定整个顺序判断输出结果 : ( function sleep(duration) { return new Promise(function(resolve, reject) { console.log("b"); setTimeout(resolve,duration); }) } console.log("a"); sleep(5000).then(()=>console.log("c")); // abc function只是声明
-
async/await
async函数必定返回Promise 我们把所有返回Promise函数都可以认为是异步函数
基本用法:
function sleep(duration) {
return new Promise(function(resolve, reject) {
setTimeout(resolve,duration);
})
}
async function foo(){
console.log(“a”)
await sleep(2000)
console.log(“b”)
}
js执行介绍(1)
最新推荐文章于 2022-03-12 14:22:48 发布