Help us understand the problem. What is going on with this article?

async/await 入門

More than 1 year has 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になっただけなので、時間の問題かなと思っています。
どんどん使っていこうと思います。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away