同步、异步,微任务、宏任务

Promise和Async

同步和异步

同步

  • 当程序1调用程序2时,程序1停下不动,直到程序2完成回到程序1来,程序1才继续执行下去。
  • 逐条执行,一条时间线

异步

  • 当程序1调用程序2时,程序1径自继续自己的下一个动作,不受程序2的的影响。

  • 常见异步

    • 操作型事件 (概念中不算是异步,但是操作型事件需要时间)
    • Load事件 (异步,需要加载)
    • Settimeout
    • setInterval
    • requestAnimationFrame
  • 先停止等待运行结束,然后再继续后续的运行

promise

ES6规定,Promise对象是一个构造函数,用来生成Promise实例

ES6为解决异步回调而生

Promise对象的基本语法:

  • new Promise((resolve,reject) => {
    //…
    });

状态:

  • pending 准备状态
  • fullfiled 执行resoled的状态
  • rejected 执行rejected的状态

调用

  • Promise
    New Promise(function(resolve,reject){

})

- .Then (fn1,fn2){
1:resolve所执行的函数
2:reject所执行的函数

}
- 另一种写法
.Then(fn1){
Resolve 执行的
}.catch(fn2){
Reject执行的
}

Promise.all()

  • 返回一个 Promise 实例

Promise.race()

  • 返回一个 promise,一旦迭代器中的某个promise解决或拒绝,返回的 promise就会解决或拒绝
  • 谁最先完成就执行谁

Promise.resolve()

  • 将现有对象转换为Promise对象,从而控制异步流程

Promise.reject()

  • 返回一个带有拒绝原因的Promise对象

几个问题:

  • 是否可以连续then

    • 可以
    • 如果这里面有return ,promise对象就会继续执行下一个then中的内容,下一个then 中对应的执行对象仍然是当前的promise代码
  • 代码执行的顺序

    • 在promise对象的then和catch中都是异步的,除此之外,都是同步的
    • Promise对象方法中,then 和catch方法本身就是异步的
    • Promise中resolve和reject执行干扰问题,只能执行一个,具有一定的排他性。跟顺序相关

Async/Await

基于Promise实现的

  • 使得异步代码看起来像同步代码

Async函数执行后返回一个promise对象

Await只能写在async函数中

Await只能处理promise对象等待

Async函数中使用的return 返回的内容可以通过then来获取

区别

  • Async把promise强化了
  • 不存在谁替代谁

微任务、宏任务

宏任务

  • 将当前的任务挪到下一个新的任务列的最顶端执行
  • setTiimeout
  • setInterval

微任务

  • 将当前任务列的内容挪至当前任务列的最底端执行

  • promise

    • Promise从then开始是微任务

执行顺序

  • 微任务内的微任务,优于微任务执行
  • 宏任务里面的微任务比微任务里面的宏任务优先
    XMind: ZEN - Trial Version
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值