JS - async和await

一震嫉、async函數(shù)

An async function is a function declared with the async keyword

  • 函數(shù)名之前加上async關(guān)鍵字,就表明該函數(shù)內(nèi)部有異步操作
  • async 函數(shù)返回一個 Promise對象(JS - Promise使用)

1.1 async函數(shù)返回值

可用async函數(shù)返回值特性重構(gòu)

function foo() {
  return new Promise((resolve) => {
    resolve("success")
  })
}
async function bar(){
  return "success"
}
foo().then((res) => {
  res // success
})
bar().then((res) => {
  res // success
})

捕獲失敗拋出異常即可

async function foo(){
  if(異步請求成功){
    return 'success'
  }else{
    throw 'error'
  }
}
foo().then((res) => {
  res // success
}).catch(err=>{
  err // error
})

二姥饰、await 操作符

The await operator is used to wait for a Promise. It can only be used inside an async function.

  • await 操作符用于等待一個Promise 對象骂际。
  • 只能在異步函數(shù) async function 中使用速兔。

2.1 await 用法

  1. await 遇到Promis時會暫停async function 的執(zhí)行价淌,等待 Promise 處理完成。
  2. 若 Promise 正常處理(fulfilled)啦鸣,其回調(diào)的resolve函數(shù)參數(shù)作為 await 表達式的值薛耻,繼續(xù)執(zhí)行 async function。
  3. 若 Promise 處理異常(rejected)赏陵,await 表達式會把 Promise 的異常原因拋出饼齿。
  4. 如果 await 操作符后的表達式的值不是一個 Promise,則返回該值本身蝙搔。
2.1.1 遇到Promise暫停async 函數(shù)
async function foo() {
   await new Promise((resolve, reject) => {
    setTimeout(resolve,2000)
  })
  console.log('2s后執(zhí)行');
}
foo()
2.1.2 Promise resolve的值作為await的返回值
async function foo() {
  var why = await Promise.resolve("success")
  why // success
}
foo()
2.1.3 await 拋出 Promise 處理異常
async function foo() {
  try {
    await Promise.reject("error")
    // Uncaught (in promise) error
  } catch (err) {
    err // error
  }
}
foo()
2.1.4 非Promise對象直接返回對應的值缕溉。
async function foo() {
  var bar= await 'why'
  bar // why
}
foo()

2.2 await結(jié)合Node.js簡單應用

const fs = require("fs")

type IRead = (path: string) => void
type IWrite = (path: string, content: string, flag: string) => void

const readFile: IRead = (path) => {
  return new Promise((resolve) => {
    fs.readFile(path, { encoding: "utf-8" }, (err, data) => {
      if (!err) resolve(data)
    })
  })
}
const writeFile: IWrite = (path, content, flag) => {
  return new Promise((resolve) => {
    fs.writeFile(path, content, { flag, encoding: "utf-8" }, (err) => {
      if (!err) resolve()
    })
  })
}

fs.readdir("../NODE", (err, files) => {
  if (err) return
  files.forEach(async (item) => {
    let content = await readFile(item)
    await writeFile("integration.text", content as any as string,"a+")
    console.log("Write succeeded")
  })
})

將讀寫文件封裝為返回Promise函數(shù),用await關(guān)鍵字,等待文件的讀取回調(diào)成功以后,再將文件寫入集合.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌剧蚣,老刑警劉巖墓造,帶你破解...
    沈念sama閱讀 211,042評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件崩哩,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評論 2 384
  • 文/潘曉璐 我一進店門鸟蜡,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人挺邀,你說我怎么就攤上這事揉忘。” “怎么了端铛?”我有些...
    開封第一講書人閱讀 156,674評論 0 345
  • 文/不壞的土叔 我叫張陵泣矛,是天一觀的道長。 經(jīng)常有香客問我禾蚕,道長您朽,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,340評論 1 283
  • 正文 為了忘掉前任换淆,我火速辦了婚禮哗总,結(jié)果婚禮上几颜,老公的妹妹穿的比我還像新娘。我一直安慰自己魂奥,他們只是感情好,可當我...
    茶點故事閱讀 65,404評論 5 384
  • 文/花漫 我一把揭開白布易猫。 她就那樣靜靜地躺著耻煤,像睡著了一般。 火紅的嫁衣襯著肌膚如雪准颓。 梳的紋絲不亂的頭發(fā)上哈蝇,一...
    開封第一講書人閱讀 49,749評論 1 289
  • 那天,我揣著相機與錄音攘已,去河邊找鬼炮赦。 笑死,一個胖子當著我的面吹牛样勃,可吹牛的內(nèi)容都是我干的吠勘。 我是一名探鬼主播,決...
    沈念sama閱讀 38,902評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼峡眶,長吁一口氣:“原來是場噩夢啊……” “哼剧防!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起辫樱,我...
    開封第一講書人閱讀 37,662評論 0 266
  • 序言:老撾萬榮一對情侶失蹤峭拘,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后狮暑,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體鸡挠,經(jīng)...
    沈念sama閱讀 44,110評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年搬男,在試婚紗的時候發(fā)現(xiàn)自己被綠了拣展。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,577評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡缔逛,死狀恐怖瞎惫,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情译株,我是刑警寧澤瓜喇,帶...
    沈念sama閱讀 34,258評論 4 328
  • 正文 年R本政府宣布,位于F島的核電站歉糜,受9級特大地震影響乘寒,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜匪补,卻給世界環(huán)境...
    茶點故事閱讀 39,848評論 3 312
  • 文/蒙蒙 一伞辛、第九天 我趴在偏房一處隱蔽的房頂上張望烂翰。 院中可真熱鬧,春花似錦蚤氏、人聲如沸甘耿。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,726評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽佳恬。三九已至,卻和暖如春于游,著一層夾襖步出監(jiān)牢的瞬間毁葱,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,952評論 1 264
  • 我被黑心中介騙來泰國打工贰剥, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留倾剿,地道東北人。 一個月前我還...
    沈念sama閱讀 46,271評論 2 360
  • 正文 我出身青樓蚌成,卻偏偏與公主長得像前痘,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子担忧,可洞房花燭夜當晚...
    茶點故事閱讀 43,452評論 2 348