2018-04-03 async/await學習

async/await

async 用于申明一個 function 是異步的溶推,而 await 用于等待一個異步方法執(zhí)行完成徊件。

await 只能出現(xiàn)在 async 函數(shù)中。

async

//普通方法
function fn() {
  return 'Hello world'
};

let result1 = fn();

console.log(result1); //Hello world


//async方法
async function fn2() {
  return 'Hello world'
};

let result2 = fn2();

console.log(result2); //Promise對象

result2.then(value => {
  console.log(value); //Hello world
});

根據(jù)上面可以看到蒜危,如果直接return 虱痕,async會調用Promise.resolve() 封裝成 Promise 對象

Promise.resolve('Hello world')等價于 new Promise(resolve => resolve('Hello world'))


await

await是在等待一個async函數(shù)的返回值,不僅僅用于等 Promise 對象辐赞,它可以等任意表達式的結果部翘,所以,await 后面實際是可以接普通函數(shù)調用或者直接量的响委。

async function getSomething() {
  return "something";
}

function testPromise() {
  return Promise.resolve("hello async");
}

async function test() {
  const v1 = await getSomething(); 
  const v2 = await testPromise();
  console.log(v1, v2); //something  hello async
}

test();
  • await 是個運算符新思,用于組成表達式,await 表達式的運算結果取決于它等的東西晃酒。
  • 因為testPromise返回的就是Promise對象表牢, 在前面可以不用加async
  • 上面async函數(shù)中,如果是直接return一個結果贝次,會返回一個promise對象崔兴,但是當await等到是一個promise對象,會得到對象中resolve的值,作為await的運算結果

async/await 的優(yōu)勢

假設一個業(yè)務敲茄,分多個步驟完成位谋,每個步驟都是異步的,而且依賴于上一個步驟的結果堰燎。我們?nèi)匀挥?setTimeout 來模擬異步操作:

/**
 * 傳入?yún)?shù) n掏父,表示這個函數(shù)執(zhí)行的時間(毫秒)
 * 執(zhí)行的結果是 n + 200,這個值將用于下一步驟
 */
function takeLongTime(n) {
    return new Promise(resolve => {
        setTimeout(() => resolve(n + 200), n);
    });
}

function step1(n) {
    console.log(`step1 with ${n}`);
    return takeLongTime(n);
}

function step2(n) {
    console.log(`step2 with ${n}`);
    return takeLongTime(n);
}

function step3(n) {
    console.log(`step3 with ${n}`);
    return takeLongTime(n);
}
  • 現(xiàn)在用 Promise 方式來實現(xiàn)這三個步驟的處理
function doIt() {
  const time1 = 300;

  step1(300).then(time2 => {
    step2(time2).then(time3 => {
      step3(time3).then(result => {
        console.log(`result is ${result}`);
      })
    })
  })
};
doIt();

//step1 with 300
//step2 with 500
//step3 with 700
//result is 900
  • async/await 實現(xiàn)
 async function doIt() {
   const time1 = 300;
   const time2 = await step1(time1);
   const time3 = await step2(time2);
   const result = await step3(time3);
   console.log(`result is ${result}`);
 };

 doIt();

 //結果一樣秆剪,結構更清晰赊淑,幾乎和同步代碼一樣;

?

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末仅讽,一起剝皮案震驚了整個濱河市陶缺,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌洁灵,老刑警劉巖饱岸,帶你破解...
    沈念sama閱讀 216,402評論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異徽千,居然都是意外死亡苫费,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評論 3 392
  • 文/潘曉璐 我一進店門双抽,熙熙樓的掌柜王于貴愁眉苦臉地迎上來百框,“玉大人,你說我怎么就攤上這事荠诬±欧” “怎么了?”我有些...
    開封第一講書人閱讀 162,483評論 0 353
  • 文/不壞的土叔 我叫張陵柑贞,是天一觀的道長。 經(jīng)常有香客問我聂抢,道長钧嘶,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,165評論 1 292
  • 正文 為了忘掉前任琳疏,我火速辦了婚禮有决,結果婚禮上,老公的妹妹穿的比我還像新娘空盼。我一直安慰自己书幕,他們只是感情好,可當我...
    茶點故事閱讀 67,176評論 6 388
  • 文/花漫 我一把揭開白布揽趾。 她就那樣靜靜地躺著台汇,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上苟呐,一...
    開封第一講書人閱讀 51,146評論 1 297
  • 那天痒芝,我揣著相機與錄音,去河邊找鬼牵素。 笑死严衬,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的笆呆。 我是一名探鬼主播请琳,決...
    沈念sama閱讀 40,032評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼赠幕!你這毒婦竟也來了单起?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 38,896評論 0 274
  • 序言:老撾萬榮一對情侶失蹤劣坊,失蹤者是張志新(化名)和其女友劉穎嘀倒,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體局冰,經(jīng)...
    沈念sama閱讀 45,311評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡测蘑,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,536評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了康二。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片碳胳。...
    茶點故事閱讀 39,696評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖沫勿,靈堂內(nèi)的尸體忽然破棺而出挨约,到底是詐尸還是另有隱情,我是刑警寧澤产雹,帶...
    沈念sama閱讀 35,413評論 5 343
  • 正文 年R本政府宣布诫惭,位于F島的核電站,受9級特大地震影響蔓挖,放射性物質發(fā)生泄漏夕土。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,008評論 3 325
  • 文/蒙蒙 一瘟判、第九天 我趴在偏房一處隱蔽的房頂上張望怨绣。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽赢笨。三九已至未蝌,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間质欲,已是汗流浹背树埠。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留嘶伟,地道東北人怎憋。 一個月前我還...
    沈念sama閱讀 47,698評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像九昧,于是被迫代替她去往敵國和親绊袋。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,592評論 2 353

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