因为js是单线程的,所以一旦代码中有报错,就不会执行下面的了,如下333就未打印 console.log(111) 好像与promise没关系,哈哈。 1.传说中的 setInterval 与 setTimeout 它们并不会阻塞js的执行,如下代码先打印的是222 console.log(111); },1000) console.log(222); 这时候如果我们想等到111打印后再打印222怎么办(实际项目中并不提倡使用延时器),代码如下 new Promise((resolve,reject)=>{ let timer = setTimeout(()=>{ console.log(111); resolve(); },1000) }).then(()=>{ console.log(222); }) 2.异步 http 请求线程 XMLHttpRequest 在连接后是通过浏览器新开一个线程请求,所以它与js也是异步的 所以现在大多数请求的方式,想axios,fetch等其实都已经用promise封装过了(请求成功resolve()失败reject()),比如常遇到的当我获取到请求的数据(走then对应resolve)或请求失败(走catch对应reject)后在进行一系列操作。但是当对多个请求的返回值同时处理的时候就会造成嵌套,这样会使代码显得非常冗长丑陋,难以维护,所以这时候就用到了await,例如: |
|