- 单线程和异步
- 背景:单线程
- (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)
})