因為js是單線程的,所以一旦代碼中有報錯,就不會執(zhí)行下面的了,如下333就未打印 console.log(111) 好像與promise沒關(guān)系,哈哈。 1.傳說中的 setInterval 與 setTimeout 它們并不會阻塞js的執(zhí)行,如下代碼先打印的是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也是異步的 所以現(xiàn)在大多數(shù)請求的方式,想axios,fetch等其實都已經(jīng)用promise封裝過了(請求成功resolve()失敗reject()),比如常遇到的當我獲取到請求的數(shù)據(jù)(走then對應(yīng)resolve)或請求失?。ㄗ遚atch對應(yīng)reject)后在進行一系列操作。但是當對多個請求的返回值同時處理的時候就會造成嵌套,這樣會使代碼顯得非常冗長丑陋,難以維護,所以這時候就用到了await,例如: |
|