LoginSignup
1
1

More than 1 year has passed since last update.

【JavaScript】非同期処理⑧ fetch

Last updated at Posted at 2021-11-24

はじめに

Udemyの【JS】ガチで学びたい人のためのJavaScriptメカニズムの講座の振り返りです。

前回の記事

目的

  • 非同期処理についての理解を深める

本題

1.fetch

サーバー上から情報を取得したりできる関数

前提
main.jsファイルと同じ階層にusers.jsonファイルを準備する
(VSコードの拡張機能:Live Serverがインストールされていないとエラーになります。)

  • 基本的にはJSと同じ書き方
  • しかしシングルクオーテーション使用不可
  • 必ずダブルクオーテーション
  • 一番最後の要素にカンマを使うとエラーになる
users.json
[
  {
    "name": "Bob",
    "age": 23
  },
  {
    "name": "Tim",
    "age": 30
  },
  {
    "name": "Sun",
    "age": 25
  }
]

例1

fetchの基本的な使い方

main.js
// 第一引数にリクエスト先のURLを入力(今回はuser.jsonファイル)
// fetch("users.json")
// どのような戻り値が帰ってくるのかコンソールで確認
// console.log(fetch(`users.json`))
// このようにするとPromiseが返ってきていることがわかるのでthenメソッドが使える
fetch(`users.json`).then(function(response){
  // サーバーから返ってきたデータを格納している
  console.log(response);
})

出力結果は以下の通り

console.
body: (...)
bodyUsed: false
headers: Headers {}
ok: true   #サーバーからデータが取得できたことを表している
redirected: false
status: 200  #Httpステータスが200ということは通信に問題がない状態
statusText: "OK"
type: "basic"
url: "http://127.0.0.1:5500/080_%E9%9D%9E%E5%90%8C%E6%9C%9F%E5%87%A6%E7%90%86/110_fetch/start/users.json"
[[Prototype]]: Response

この結果にあるjsonメソッドを使う(jsonファイル取得のため)

main.js
fetch(`users.json`).then(function(response){
  // コンソールからjsonというメソッドが使えることがわかる
  return response.json();
}).then(function(Json){
  // この引数Jsonにデータが入っているか確認する
    console.log(Json);
})

このようにすると以下のように出力される

console.
(3) [{…}, {…}, {…}]
0: {name: 'Bob', age: 23}
1: {name: 'Tim', age: 30}
2: {name: 'Sun', age: 25}
length: 3
[[Prototype]]: Array(0)

例2

データの取得がうまくいっていたので、応用して出力する

main.js
fetch(`users.json`).then(function(response){
  return response.json();
}).then(function(Json){
    console.log(Json);
    // for文を使用してループ
    for(const user of Json){
      // テンプレートリテラルを使って出力
      // nameとageがusers.jsonファイルのものを使用
      console.log(`おれは ${user.name}, 今年で${user.age}になる。`)
    }
})

// 以下のように出力されている
// おれは Bob, 今年で23になる。
// おれは Tim, 今年で30になる。
// おれは Sun, 今年で25になる。

重要なのは2点

Promiseのオブジェクトを返す
jsonのオブジェクトを使用するにはjsonメソッドを使用して取得する必要がある

例3

awaitとasyncで出力してみる

async function fetchUsers(){
  const response = await fetch(`users.json`);
  const Json = await response.json();
  for(const user of Json){
    console.log(`おれは ${user.name}, 今年で${user.age}になる。`)
  }
}
// 実行すると同じ出力結果となる
fetchUsers();

今日はここまで!

参考にさせて頂いた記事

1
1
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
1
1