异步与同步,Promise,async/await

99 阅读1分钟

学习记录,不喜勿喷,个人理解,欢迎指正

异步与同步的概念就先不说了,因为这些在网上都有,烂大街了...

下面进入正题!!!

异步与同步

5d3c45291c7765118c7b0d3817f627e.png

  1. JavaScript主线程同步任务依次执行
  2. 将异步任务委托给宿主环境进行执行
  3. 已完成的异步任务根据对应的回调函数,依次进入待执行队列
  4. 主线程执行栈被清空后会依次读取任务队列中的回调函数
  5. 主线程依次执行4步骤

根据上述步骤,可以看一下这个题

1caf271211a818ab688d3470f7adc45.png

主线程中的任务是

089a02b07fd7fbb72d260fa09bfb943.png

48b4170500bab1adab03c8f24c467f2.png

宿主环境一的任务是

fecee4100b3a28cb05e894ab6e0e079.png

c30e21c111dfa1bbc454863197f1a47.png

宿主环境二的任务是

3e97c75133d1b513e35fb0e24ef60fe.png

所以这个题的答案是a,b,b,undefined

Promise

    const p = new Promise((reslove,reject)=>{
        if(true){
            reslove('123')
        }else{
            reject('error')
        }
    }).then((res)=>{
        console.log(res)//'123'
    }).catch((err)=>{
        console,log(err)//'error'
    })

不难看出.then执行的是reslove返回的结果,.catch执行的是reject的返回结果 强调一下,Promise本身是同步的,但是.then和.catch是异步的

Async/Await

个人理解的是async是异步,await相当于是同步 await的作用是将异步改为同步,依次执行。