LoginSignup
23
17

More than 5 years have passed since last update.

今更ですが、async/awaitを学びました。

async/awaitとは

今までPromise等を使って書いていた非同期処理をもっと簡素に書くことができる構文。
asyncawaitというワードを使用する。

動作確認環境

  • node.js: v10.14.0
  • OS: Mac

async

関数宣言
関数の前にasyncを宣言することで、この関数はPromiseを返すようになる。

以下の2つの例は同じことを意味する。

Promiseを使った例


function promiseSample() {
  return new Promise(function(resolve, reject){
    resolve("promise sample");
  });
}

promiseSample().then(function(value){
  console.log(value);  // "promise sample"
});

asyncを使った例


async function asyncSample() {
  return "async sample"
}

asyncSample().then(function(value){
  console.log(value);  // "async sample"
});

asyncを宣言した関数は、呼び出されるとPromiseを返す。
関数内で値をreturnしていたらその値をresolveし、例外などを投げていたらrejectする。
上記例で見る限りでも、Promiseを使っている関数(promiseSample)より、asyncを宣言している関数(asyncSample)の方が簡潔に書くことはできている。

await

演算子
asyncを宣言した関数をよび出す前に書くことで、関数のPromiseが解決するのを待つ。
awaitasyncを宣言した関数内でしか使うことができない。

以下の2つの例は同じことを意味する。

Promiseを使った例

function promiseSample() {
  return new Promise(function(resolve, reject){
    resolve("promise sample");
  });
}

function waitPromise() {
  return promiseSample().then(function(value){
    return value;
  });
}

waitPromise().then(function(value){
  console.log(value);  // "promise sample"
});

async/awaitを使った例

async function asyncSample() {
  return "async sample"
}

async function waitAsync(){
  var value = await asyncSample();
  return value;
}

waitAsync().then(function(value){
  console.log(value);  // "async sample"
});

個人的な感想

確かに、async/awaitを使った方が短く、簡潔にかけると感じました。
非同期のコードを書くときは大抵ネストがどんどん深くなっていくので、そうなればなるほど良さが出てきそうです。
その一方、まだ慣れていないため、Promiseというワードがある方が非同期感があってわかりやすい(認識しやすい)と感じてしまっています。。。
ただ、Promiseというワードで見ていたところがasync/awaitになっただけなので、時間の問題かなと思っています。
どんどん使っていこうと思います。

23
17
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
23
17