ES8(13)、await 和 async 的用法

async函數(shù)是使用async關(guān)鍵字聲明的函數(shù)。 async函數(shù)是AsyncFunction構(gòu)造函數(shù)的實例禁舷, 并且其中允許使用await關(guān)鍵字彪杉。asyncawait關(guān)鍵字讓我們可以用一種更簡潔的方式寫出基于Promise的異步行為,而無需刻意地鏈?zhǔn)秸{(diào)用promise牵咙。

1派近、先簡單回顧一下Promise用法

function 搖色子(){
  return new Promise((resolve,reject)=>{
    setTimeout(()=>{
      let n=parseInt(Math.random()*6+1,10) //1~6的隨機數(shù)
      resolve(n)
    },1000)
  })
}

搖色子().then(
   x=>{
     console.log("色子的點數(shù)是"+x);
   },
   ()=>{
     console.log("搖色子還能失敗洁桌?");
   },
)

2渴丸、上面采用鏈?zhǔn)?code>.then調(diào)用promise,現(xiàn)在改用用async函數(shù)

function 搖色子(){
  return new Promise((resolve,reject)=>{
    setTimeout(()=>{
      let n=parseInt(Math.random()*6+1,10) //1~6的隨機數(shù)
      resolve(n)
    },1000)
  })
}

async function test(){
  let n=await 搖色子()  //await不能直接使用另凌,必須要用async 聲明的函數(shù)包裹才能使用谱轨,否則報錯
  console.log(n)
}

test()

3、改用了async...await吠谢,如果要打印出錯誤信息可以結(jié)合try...catch使用

function 猜大小(猜測){
  return new Promise((resolve,reject)=>{
    console.log("開始搖色子")
    setTimeout(()=>{
      let n=parseInt(Math.random()*6+1,10) //1~6的隨機數(shù)
      if(n>3){
        if(猜測==="大"){
          resolve(n);
        }else{
          console.log('error')
          reject(n)
        }
      }else{
        if(猜測==="小"){
          resolve(n);
        }else{
        console.log('error')
        reject(n)
        }
      }
      resolve(n)
    },1000)
  })
}

async function test(){
  try{
    let n=await 猜大小("大")
    console.log("中獎了"+n)
  }catch(error){
    console.log("輸光了"+error)
  }
}

test()

4土童、但是async...await也有自己局限性,例如還是上面例子工坊,如果我要同時進(jìn)行兩次猜色子游戲献汗,

(1)、用鏈?zhǔn)?code>.then寫法:引用Promise.all這個API

Promise.all([猜大小('大'),猜大小('大')])  //引用Promise.all這個API王污,兩者都成功才會執(zhí)行
  .then((x)=>{console.log(x)},(y)=>{console.log(y)})

(1)罢吃、用async...await寫法:還是引用Promise.all這個API

async function test(){
  try{
    let n=await Promise.all([猜大小('大'),猜大小('大')]) 
    console.log("中獎了"+n)
  }catch(error){
  console.log("輸光了"+error)
  }
}

test()

4、使用async...await返回值依舊是一個Promise昭齐,這個promise要么會通過一個由async函數(shù)返回的值被解決尿招,要么會通過一個從async函數(shù)中拋出的(或其中沒有被捕獲到的)異常被拒絕。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末阱驾,一起剝皮案震驚了整個濱河市就谜,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌里覆,老刑警劉巖吁伺,帶你破解...
    沈念sama閱讀 222,104評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異租谈,居然都是意外死亡篮奄,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,816評論 3 399
  • 文/潘曉璐 我一進(jìn)店門割去,熙熙樓的掌柜王于貴愁眉苦臉地迎上來窟却,“玉大人,你說我怎么就攤上這事呻逆】浜眨” “怎么了?”我有些...
    開封第一講書人閱讀 168,697評論 0 360
  • 文/不壞的土叔 我叫張陵咖城,是天一觀的道長茬腿。 經(jīng)常有香客問我呼奢,道長,這世上最難降的妖魔是什么切平? 我笑而不...
    開封第一講書人閱讀 59,836評論 1 298
  • 正文 為了忘掉前任握础,我火速辦了婚禮,結(jié)果婚禮上悴品,老公的妹妹穿的比我還像新娘禀综。我一直安慰自己,他們只是感情好苔严,可當(dāng)我...
    茶點故事閱讀 68,851評論 6 397
  • 文/花漫 我一把揭開白布定枷。 她就那樣靜靜地躺著,像睡著了一般届氢。 火紅的嫁衣襯著肌膚如雪欠窒。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,441評論 1 310
  • 那天退子,我揣著相機與錄音贱迟,去河邊找鬼。 笑死絮供,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的茶敏。 我是一名探鬼主播壤靶,決...
    沈念sama閱讀 40,992評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼惊搏!你這毒婦竟也來了贮乳?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,899評論 0 276
  • 序言:老撾萬榮一對情侶失蹤恬惯,失蹤者是張志新(化名)和其女友劉穎向拆,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體酪耳,經(jīng)...
    沈念sama閱讀 46,457評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡浓恳,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,529評論 3 341
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了碗暗。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片颈将。...
    茶點故事閱讀 40,664評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖言疗,靈堂內(nèi)的尸體忽然破棺而出晴圾,到底是詐尸還是另有隱情,我是刑警寧澤噪奄,帶...
    沈念sama閱讀 36,346評論 5 350
  • 正文 年R本政府宣布死姚,位于F島的核電站人乓,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏都毒。R本人自食惡果不足惜色罚,卻給世界環(huán)境...
    茶點故事閱讀 42,025評論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望温鸽。 院中可真熱鬧保屯,春花似錦、人聲如沸涤垫。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,511評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蝠猬。三九已至切蟋,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間榆芦,已是汗流浹背柄粹。 一陣腳步聲響...
    開封第一講書人閱讀 33,611評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留匆绣,地道東北人驻右。 一個月前我還...
    沈念sama閱讀 49,081評論 3 377
  • 正文 我出身青樓,卻偏偏與公主長得像崎淳,于是被迫代替她去往敵國和親堪夭。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,675評論 2 359

推薦閱讀更多精彩內(nèi)容

  • 一拣凹、async/await的優(yōu)點 1)方便級聯(lián)調(diào)用:即調(diào)用依次發(fā)生的場景森爽; 2)同步代碼編寫方式: Promise...
    puxiaotaoc閱讀 105,623評論 7 62
  • 相對于回調(diào)函數(shù)來說,Promise是一種相對優(yōu)雅的選擇嚣镜。那么有沒有更好的方案呢爬迟?答案就是async/await。優(yōu)...
    饑人谷_阿銀閱讀 860評論 0 0
  • 相對于回調(diào)函數(shù)來說菊匿,Promise是一種相對優(yōu)雅的選擇付呕。那么有沒有更好的方案呢?答案就是async/await跌捆。優(yōu)...
    勇往直前888閱讀 47,300評論 8 36
  • async函數(shù)是使用async關(guān)鍵字聲明的函數(shù)凡涩,async函數(shù)是AsyncFunction構(gòu)造函數(shù)的實例,返回值是...
    hunter97閱讀 175評論 0 0
  • 原文連接:https://blog.csdn.net/sinat_17775997/article/details...
    小豆soybean閱讀 4,263評論 0 7