Promiseで使う【async/await】の学習

asyncとawaitの学習

ポイント

  • asyncはpromiseを(正常動作と異常動作の準備)を簡単に記述する。
  • awaitはpromiseで使われる正常動作と異常動作の記述に.thenを使わなければいけないところ、awaitで一文で簡潔に書ける。
fetch('http://example.com/movies.json')
  .then(response => response.text())
  .then(data => console.log(data));

fetchはpromiseで実装されていてresponseオブジェクトを含むため.thenからresponseをアロー関数で受け取ることができる。

awaitを使う場合は

fetch('http://example.com/movies.json')
  await response.text();
  await console.log(data);

こうしたい気もするけど fetchからのpromiseオブジェクトが.thenで繋がらずにawaitで省略しているため、responseが何も入っていない状態のためjsonで呼び出せない。 省略したい場合は

let response =fetch('http://example.com/movies.json')
  let data = await response.text();
  await console.log(data);

しっかり変数に入れてその変数から取り出す処理を書く。

しかし、fetchを変数に入れるとawaitは基本的にasync関数の中で機能するため

async function show(){
let response = fetch('http://example.com/movies.json')
  let data = await response.text();
  await console.log(data);
}

show();

asyncでラップする(囲う)。 でもでもこれだと、async関数の中でfetchが機能しないので、

async function show(){
      let response = await fetch('http://example.com/movies.json')
      let data = await response.text();
      await console.log(data);
}

show();

このようにawaitでfetchを起動させなければいけない。

と、こんな感じでfetchはpromiseオブジェクトを含むのでawaitを使って綺麗に書こうと思ったら、asyncを使わないといけないし、asyncを使ったらfecth自体もawaitで書かなければいけないしで色々重ねて書く必要がある。

見た目は綺麗。

async/awaitはruby使ってる時の作業に若干近いと感じた。