日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

promise的常用情況

 路人甲Java 2021-10-28

因為js是單線程的,所以一旦代碼中有報錯,就不會執(zhí)行下面的了,如下333就未打印

console.log(111)
throw Error(222)
console.log(333)

好像與promise沒關(guān)系,哈哈。

1.傳說中的 setInterval 與 setTimeout
它們是單獨的線程執(zhí)行計數(shù)的(因為 JavaScript 引擎是單線程的, 如果處于阻塞線程狀態(tài)就會影響記計時的準確),

它們并不會阻塞js的執(zhí)行,如下代碼先打印的是222
let timer  = setTimeout(()=>{

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,例如:
const init = async ()=>{
  let a = await axios().catch(err=>err);
  let b = await axios().catch(err=>err);
  let c = await axios().catch(err=>err);
  return a&&a.num&&b&&b.num&&c&&c.num&&a+b+c
}

最后附上Promise.all和Promise.race的使用理解

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多