js执行介绍(1)

  1. 宿主发起的任务 宏观任务
    宏任务可能会执行的代码包括 脚本 模块 函数体

    JavaScript引擎发起的任务 微观任务
    宏观任务中又包含了一个微观任务队列
    许多的微观任务队列形成了宏观任务

    Promise永远在队列尾部添加微观任务 setTimeout等宿主API 添加宏观任务

    • 一个感性的认知: JavaScript引擎会常驻于内存中 它等待宿主把JavaScript代码或者函数传递给它执行
      JavaScript引擎实际上做的事情就是 不断的 等待 执行 ( node中称为事件循环 )
      每一个新的宏任务 就循环一遍
  2. 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

  3. 分析异步执行的顺序
    首先我们分析有多少个宏任务
    在每个宏任务中 分析有多少个微任务
    根据调用次序 确定宏任务中的微任务执行次序
    根据宏任务的触发规则和调用次序 确定宏任务的执行次序
    确定整个顺序

     判断输出结果 : (
    
         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只是声明
    
  4. 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”)
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值