Async function

在ES2017中引入了Async function,簡化了Promise調用callback function的方式,使得非同步操作更加簡潔、優雅。

async/await

async function會回傳一個Promise Object,如果async function最後return了一個value,則會回傳帶有此value回傳值且狀態為resolved的Promise; 若async function拋出例外,則會回傳帶有被拋出值且狀態為rejected的Promise。

await會暫停async function的執行,等待Promise物件的解析,並在Promise物件的值被resolve時回復async函式的執行。await會回傳這個被 resolve 的值,如果回傳值不是一個 Promise 物件,則會被轉換為 resolved 狀態的Promise物件回傳。

錯誤處理可將await包在try...catch語句中。

async function foo() {
  try {
    let result = await doSomething();
    let newResult = await doSomethingElse(result);
    let finalResult = await doThirdThing(newResult);
    console.log(`Got the final result: ${finalResult}`);
  } catch(error) {
    failureCallback(error);
  }
}

Async function搭配Promise使用

若需要對async function回傳的Promise進行後續的處理,可搭配Promise調用callback function來針對不同的狀態做處理。

foo()
.then(value => {
	console.log(value); // Success!
})
.catch(reason => {
	console.log(reason); // Error!
});

Ref