5.同步和异步.md

  • 单线程和异步
    • 背景:单线程
      • (JS本质)JS是单线程语言,只能做一件事
      • 浏览器和nodejs已支持JS启动进程,如web worker(但并不是说能改变JS单线程这个本质)
      • JS和DOM渲染共用同一线程:因为JS可修改DOM结构,因此会有JS堵塞DOM构建的说法
    • 异步:
      • 解决场景:遇到等待(网络请求、定时任务)不能卡住
      • 回调callback函数形式
      • 特点:不会阻塞代码执行,会先同步按序执行JS,直到异步的时间点到了,再去执行之前的回调函数,【就算setTimeout的时间点为0,它依然是个异步回调函数,因此依然会在JS同步执行全部完毕之后再去执行】
  • 应用场景
    • 定时任务,如setTimeout
    • 网络请求,如ajax图片加载
  • 如果都是同步执行,卡就卡,等待就等待,那么等待的过程CPU是空闲的,这是在浪费资源
  • callback hell 和promise(promise是用于解决callback hell)
    • callback hell是在ajax出来之后,promise出来之前,一直被诟病的一个问题,不断地嵌套请求
    • promise产生解决了:
      • 管道形式,改变了callback hell的嵌套形式,符合人的书写习惯
    • promise语法:
new Promise((resolve,reject)=>{
 // ...请求代码
}).then(success=>{
  resolve(success)
}).catch(error=>{
  reject(error)
})

你可能感兴趣的:(5.同步和异步.md)