微队列和宏队列

此文作废,事件循环参考最新博文
https://blog.csdn.net/s8806479/article/details/131270201
在这里插入图片描述

———————————————————2302.12.4分割线———————————————————————
https://www.jianshu.com/p/d3ee32538b53
在这里插入图片描述
在这里插入图片描述
一个事件循环有一个或者多个任务队列;
每个事件循环都有一个microtask队列
macrotask队列就是我们常说的任务队列,microtask队列不是任务队列
一个任务可以被放入到macrotask队列,也可以放入microtask队列
当一个任务被放入microtask或者macrotask队列后,准备工作就已经结束,这时候可以开始执行任务了。

开始 -> 取task queue第一个task执行 -> 取microtask全部任务依次执行 -> 取task queue下一个任务执行 -> 再次取出microtask全部任务执行 -> …

function func(num) {
  return function () {
    console.log(num)
  };
}
setTimeout(func(1));
async function async3() {
  await async4();
  console.log(8)
  //等同于
  //Promise.resolve(async4()).then(() => {
  //    console.log(8);
  //})
}
async function async4() {
  console.log(5)
}
async3();
function func2() {
  console.log(2);
  async function async1() {
    await async2();
    console.log(9)
    //等同于
    //Promise.resolve(async2()).then(() => {
    //    console.log(9);
    //})
  }
  async function async2() {
    console.log(5)
  }
  async1();
  setTimeout(func(4))
}
setTimeout(func2);
setTimeout(func(3));
new Promise(resolve => {
  console.log('Promise');
  resolve()
}).then(() => console.log(6))
  .then(() => console.log(7));
console.log(0);

在这里插入图片描述
有个疑问

function func(num) {
  return function () {
    console.log(num)
  };
}
function func2() {
  setTimeout(func(4))
}
setTimeout(func2);
setTimeout(func(3));

输出3 4
我认为是这样的,微队列一开始setTimeout(func2); setTimeout(func(3));这么个顺序,然后进第一个,好家伙里面还有setTime那么微队列变成setTimeout(func(3));setTimeout(func(4))

function func(num) {
  return function () {
    console.log(num)
  };
}
setTimeout(func(4))
setTimeout(func(3));

输出4 3
参考了以下文章
https://blog.csdn.net/qq_40677590/article/details/107128860

        const first = () => (new Promise((resolve, reject) => {
            console.log(1)
            let p = new Promise((resolve, reject) => {
                console.log(2)
                setTimeout(() => {
                    console.log(3)
                    resolve(4)
                })
                resolve(5)
            })
            resolve(6)
            p.then((arg) => {
                console.log(arg)
            })
        }))
        first().then((arg) => {
            console.log(arg)
        })
        console.log(7)
        /*
            同步执行:1 2 7
            微任务:5 6
            宏任务:3
         */
        //1 2 7 5 6 3


        setTimeout(() => {
            console.log(1)
        })
        new Promise((resolve, reject) => {
            console.log(2)
            resolve()
        }).then(() => {
            console.log(3)
            new Promise((resolve, reject) => {
                console.log(4)
                resolve()
            }).then(() => {
                console.log(5)
            }).then(() => {
                console.log(6)
            })
        }).then(() => {
            console.log(7)
        })
        new Promise((resolve, reject) => {
            console.log(8)
            resolve()
        }).then(() => {
            console.log(9)
        })

        /*
            同步执行:2 8
            微任务:3 [同:4] 9 5 7 6
            宏任务:1
         */
        //2 8 3 4 9 5 7 6 1


console.log('script start');

async function async1() {
  await async2();
  console.log('async1 end');
}

async function async2() {
  console.log('async2 end');
}

async1();
setTimeout(function() {
  console.log('setTimeout');
}, 0);
new Promise(resolve => {
  console.log('Promise');
  resolve();
}).then(function() {
  console.log('promise end');
});
console.log('script end');

在这里插入图片描述

console.log('script start');

async function async1() {
  await async2();
  console.log('async1 end');
}

async function async2() {
  console.log('async2 end');  
  return Promise.resolve()
  		.then(()=>{
  			console.log('async2 end in promise')
  		})
}

async1();
setTimeout(function() {
  console.log('setTimeout');
}, 0);
new Promise(resolve => {
  console.log('Promise');
  resolve();
}).then(function() {
  console.log('promise end');
});
console.log('script end');

在这里插入图片描述
https://zhuanlan.zhihu.com/p/74339572

https://github.com/Advanced-Frontend/Daily-Interview-Question/issues/7

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
任务和任务的执行顺序是有区别的。在每一个任务中又可以产生任务,当任务全部执行结束后执行下一个任务。这样的执行顺序可以表示为【任务 [任务】 -> 【任务 [任务】 -> 【任务 [任务】... 任务。具体来说,当一个任务开始执行时,如果在任务的执行过程中产生了任务,那么这些任务会被添加到任务队列中。当当前任务执行完成后,会立即执行任务队列中的任务,直到任务队列为空。然后才会执行下一个任务。这样的执行顺序保证了任务优先于下一个任务的执行。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [干货:任务和任务执行顺序详解](https://blog.csdn.net/frontend_frank/article/details/130096892)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [任务和任务哪个先执行?](https://blog.csdn.net/qq_59737146/article/details/128814404)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值