ES7: async/await

developer.mozilla.org

async関数は実行するとPromiseが返る。
何もreturnしなくてもresolve扱いになるし、何か値をreturnすると、その値をもってresolveされる。

function multiplyBy2(number) {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      resolve(number * 2);
    }, 1000);
  });
}

async function tryAsync() {
  let v = 100;
  v = await multiplyBy2(v);
  v = await multiplyBy2(v);
  v = await multiplyBy2(v);
  return v;
}

tryAsync()
  .then((result) => {
    console.log(result);// 800
  });

ちなみにthrowするとreject扱いで返される。

async function tryError() {
  let v = 100;
  v = await multiplyBy2(v);
  throw new Error("Error!!");
}

tryError()
  .then((result) => {
    console.log(result);
  })
  .catch((e) => {
    console.log(e);// 👉こっちくる
  });