KDE BLOG

不器用ですから

【ES2017】async/await の基礎(後編)

前回に続き、Async Function(async/await)の使い方について学びます。
今回はおもにAsync Functionを使う上での注意点にフォーカスを当てていきたいと思います。

  • Async Functionとコールバック関数の問題
    • Promiseだけ使ったケース
    • Async Functionとコールバック関数を使ったケース
    • 不具合の理由
    • 解決方法
  • 非同期のコールバック関数内のエラーをキャッチできない
    • 理由
    • 解決方法
  • まとめ
  • 参考
続きを読む

【ES2017】async/await の基礎(前編)

Promiseの理解はできたので async/await について基礎から学んでいきたいと思います。

  • async/await とは
    • 簡単なサンプル
      • Promiseを使った例
      • Async Functionを使った例
  • Async Functionの定義方法
  • Async Function の役割
  • await 式について
    • Async Functionでのエラーハンドリング
      • Async Function呼び出し元をcatch メソッドでつなぐ
      • try-catch を使う
      • エラー処理は呼び出し元に記述するべきか、呼び出し先に記述すべきか
    • awaitは常にPromiseを受け取る
    • awaitはAsync Functionの直下のみ使用可能
  • Async Function 利用パターン
    • 非同期の逐次処理
      • 1. then をつなぐ
      • 2. Array.prototype.reduce() を使う
      • 3. Async Fuction を使う
    • 非同期の並列処理
    • Promiseの結果を再利用したい場合
  • ここまでのまとめ
  • 参考
続きを読む

【JavaScript 小ネタ】JSXなどのテンプレート上でクラス名に入る無駄な空白(スペース)をよしなに削除する方法

ちょっとした小ネタを思いついたので書いておきたいと思います。

JSX上などで、クラス名の出し分けとかによくある下記のような記述をすると、場合によっては無駄な空白(スペース)が開発者ツール上で見えたりして気になったりしないでしょうか?

<a href="#" className={`foo ${isActive ? "is-active" : ""} ${isHidden ? "is-hidden" : ""}`}>test</a>

Chromeの開発者ツールでの見え方

f:id:jinseirestart:20181104163937p:plain

foo の後ろに、無駄な空白が入ってしまっています。

こういう時皆さんはどうしていますか?

自分の場合は今まで、挙動には問題ないのでそのまま無視するか、下記のように空白が入ることを想定した書き方をしていました。

<a href="#" className={`foo${isActive ? " is-active" : ""}${isHidden ? " is-hidden" : ""}`}>test</a>

${...} の前に空けていた空白を削除して詰めれば、無駄な空白は生まれなくなります。
しかし 可読性が低下 してしまうので良い方法とは言えません。
何かスマートに解決できる方法があればいいなーとなんとなく思っていました。

続きを読む

【JavaScript】ちゃんと理解しておきたいPromiseの勘所など

以前下記の記事でPromiseについて調べたことをまとめましたが、どうもすっきりと腹落ちしていませんでした。

kde.hateblo.jp

ようやく最近になってふと腹落ちして理解できたと思うので、改めて自分の頭の整理のためにまとめておきたいと思います。

  • Promiseとは
  • Promiseの勘所
    • 絶対に必要な基礎知識
    • Promise.resolve() は渡す引数によって返されるPromiseオブジェクトが変わる
    • then() は 非同期で行われるPromise.resolve() とほぼ同じ役割
    • Promiseオブジェクトを渡した例
  • Promiseでの逐次(直列)処理
    • Array.prototype.reduce() と組み合わせて見やすく書く
  • Promise.race() を使ったタイムアウト処理
  • まとめ
  • 参考
続きを読む

【JavaScript基礎】Fetch APIの基礎

これまでFetch APIをなんとなくで使っていてちゃんと理解できていなかったので、改めて調べ直して使い方を理解していこうと思います。

  • Fetch API概要
  • 対応ブラウザ
  • 構文
    • 第一引数(input)
    • 第二引数(init)
    • 戻り値
  • 基本的なリクエスト&レスポンスの取得
    • fetch() から返されるPromiseは404でもrejectされない
  • Response オブジェクト
    • プロパティ
    • メソッド
    • Response オブジェクトが得られるタイミング
  • まとめ
  • 参考
続きを読む

【ES2015】スプレッド演算子の基礎まとめ

ES2015から使えるスプレッド演算子Spread Operator)について理解がまとまっていないので、きちんとまとめておきたいと思います。

  • 構文
  • 関数呼び出しでの例
  • 配列リテラルでの例
    • 配列のコピー
  • Objectリテラルでの例
  • レスト構文
    • 分割代入でプロパティをまとめる
    • 分割代入で配列を分割する
    • 可変長引数の関数を作る
  • その他の使い方
    • 文字列を配列に分割
    • NodeListやHtmlCollectionを配列化
  • まとめ
  • 参考
続きを読む

【JavaScript基礎】Array.prototype.reduce() をしっかり理解する&サンプル集

配列のメソッドの中でも個人的にとっつきにくくて苦手意識のあった Array.prototype.reduce()
しかしAPIから取得したデータを扱いやすいように整形できたりと、使いこなせればとても強力なツールになることは間違いなく、この苦手意識を克服するために理解を深めつつ、いくつかのサンプルを作ってみたいと思います。

  • Array.prototype.reduce() の概要
    • 構文
    • 原則、初期値はつけた方が良い
  • サンプル集
    • 配列をオブジェクトにする
    • 配列をインデックス付きのオブジェクトにする
    • 配列内の要素から不要な値を削除する
    • 二次元配列を一次元配列にする
    • 多次元配列を一次元配列にする(再帰
    • 条件にマッチする要素から値を出す
    • 配列内の重複している値を除外する
    • filter() + map() の代わりに使う
    • テンプレートリテラルのタグ関数で文字列の組み立てに使う
  • まとめ
  • 参考
続きを読む