简单理解promise

首先js是单线程这是无容置疑的,因为js作为浏览器脚本语言,js的主要用途就是与用户互动,以及操作DOM渲染页面。这就决定了它只能是单线程,不然会带来很麻烦的同步问题。但是随着需求的增长,还是需要js进行多线程处理的。下面是关于promise方面需要了解的点

1.同步(synchronous)异步(asynchronous)

同步可以理解为在同一时间你只能做一个事情,这就可以说是在调用栈(后进先出)。

function one () {
    console.log(1);
    two();
    console.log(3);
}
function two () {
    console.log(2);
}
one()  // 1 2 3

异步可以理解为边听歌边敲代码,这可以说是使用消息队列(task queue)。

(消息队列:在开启多线程的时候,浏览器还会维护一个消息列表,除了主线程,其余的都是副线程,这些副线程合起来就叫消息列表。)

const list = () => {
    setTimeout(() => {
        console.log('setTimeout内部回调啦!')
    },1500)
};
console.log('one');
list();
console.log('two');

// 打印结果: one two setTimeout内部回调啦!

 宏任务(macro-task):js同步执行的代码块,setTimeout、setInterval、XMLHttprequest、setImmediate、I/O、UI rendering等。

 微任务(micro-task):promise、process.nextTick(node环境)、Object.observe, MutationObserver等。

 微任务的等级比宏任务执行等级高一点

 浏览器执行的顺序:
 (1)执行主代码块,这个主代码块也是宏任务
 (2)若遇到Promise,把then之后的内容放进微任务队列
 (3)遇到setTimeout,把他放到宏任务里面
 (4)一次宏任务执行完成,检查微任务队列有无任务 
 (5)有的话执行所有微任务 
 (6)执行完毕后,开始下一次宏任务。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值