JS Promise和setTimeout 任务队列

  Promise

  •  Promise是es6引入的一种标准,更好的处理异步操作和解决回调地狱,具有更好的可读性和可维护性
  • Promise有三种状态。Pending(进行中)、Fulfilled(完成)、Reject(失败)
  • Fulfilled(完成)、Reject(失败)分别对应then和catch的回调
  • 可以使用then进行链式调用,每一个then会返回新的Promise。手写Promise.all如下
  • function myPromiseAll(iterable) {
        return new Promise((resolve,reject) => {
            const promises = Array.from(iterable);
            // 定义Promise对象resolve的数组
            const result = [];
            // 定义一个计数器用来判断是否所有的promise执行完毕
            let count = 0;
            // 并发执行每一个promise
            for (let i = 0; i < promises.length; i++) {
                Promise.resolve(promises[i]).then(res => {
                    result[i] = res;
                    count++;
                    if (count === promises.length) {
                        resolve(result);
                    }
                }).catch(err => reject(err))
            }
        })
    }
    

 其中,Promise属于同步任务,then属于微任务

事件轮询EventLoop

  • Js从诞生起就是单线程。js作为主要允许在浏览器的脚本语言,主要用途之一就是操作DOM。如果出现两个线程,同时对同一个DOM进行操作,这时浏览器应该听哪个线程需要考虑很多因素。为了避免这种情况,js必须是一门单线程语言
  • EventLoop为了解决I/O操作时,由于一个任务需要长时间等待,而浪费资源问题。
  • 即,程序中会设置两个线程,一个负责程序本身的允许,称为“主线程”;另一个负责与主线程的通信,即任务队列,只有任务队列通知主线程,某个异步任务才可以执行,该任务才能进入主线程
    • js中的任务可以分为:同步任务和异步任务
    • 同步任务直接在主线程依次执行
    • 异步任务再分为宏任务和微任务
    • 一个宏任务的所有微任务全部执行了后才能执行下一个宏任务
    • 宏任务

      • setInterval()
      • setTimeout()
      • setImmediate()
      • ajax
      • 事件绑定
    • 微任务

      • new Promise()后的then与catch函数
      • new MutaionObserver()
      • process.nextTick(Nodejs)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值