SlideShare a Scribd company logo
JavaScriptの
光と闇を知る
非同期処理の話
Presented by JS初心者まっきー
自己紹介
• Python が好きなJavascript初心者です
• ボルダリング行きたい
• @makky_tw
Javascriptといえば非同期処理
• 非同期処理とJavascriptは切っても切れない関係
• 非同期処理を分かっていないとJavascriptはつらい(経
験談)
• イケてるフロントエンジニアとは非同期処理を分か
っているということである
キーワード
• シングルスレッド
• 非同期処理
• Promise
• async/await
• promisify ( pify )
なぜ非同期処理が必要か
• Javascriptはシングルスレッドで動作する
• よってJavascriptは並列処理はできない
• もし全て同期的に処理していたらhttp通信などの時間
のかかる処理で全体の処理が止まってしまう
• 非同期処理をすることで時間のかかる処理を待って
いる間に他の処理を走らせることが可能になる
問題
• このコードの出力結果は?
1
3
2
問題2
• このコードの出力結果は?
1 2 3 4 5 6 7 8 9 早く表示しろ!
なぜ?
• setTimeout()は 「n秒後に実行する」ではなく、
「n秒後に実行キューに追加する」であるから
• すなわち、正確にはsetTimeout(func, n)はn秒後に
funcを実行しているのではなく、キューに追加されて
から実行されるまでのラグが存在する
• キューに追加されてから他の重い処理が割り込むと
、n秒後に実行されていないように感じる
Promise
• Promiseは非同期処理のコールバック地獄(コールバック関数を
書きまくってネストが深くなること) から逃れるための仕組み
• コールバック地獄とは何かを簡単なコードで書いた例がココに
載っている
http://qiita.com/YoshikiNakamura/items/732ded26c85a7f771a2
7#%E9%9D%9E%E5%90%8C%E6%9C%9F%E5%87%A6%E
7%90%86%E3%82%92%E8%A1%8C%E3%81%AA%E3%81%
86%E9%96%A2%E6%95%B0%E3%82%92%E4%BD%9C%E3
%82%8B%E3%82%B3%E3%83%BC%E3%83%AB%E3%83%
90%E3%83%83%E3%82%AF%E7%89%88
async/await
• Promiseはコールバック地獄から逃れる良い手段
• しかし、非同期処理をする回数が不定で合った場合
、thenを不定回数書くことはできないため困る(再
帰的に関数を書けば解決できるが人類で再帰関数を
書きたがる者は稀である)
• async / await を使うことで簡潔で柔軟な処理が書け
る
async/await
• async/await のコードを書いてみた
https://gist.github.com/tonkatu05/a8a846f1db4a790b
1e1854760a4c3beb
promisify (pify)
• promisify あるいは pifyを使って既存の非同期関数を
promise化できる
• promisifyはnode v8 からの機能
• node v6 の場合はpifyで同等のことが可能(?)
• http://abouthiroppy.hatenablog.jp/entry/2017/04/27/1
10733
promisify (pify)
• promisifyを使えばたくさんpromise作れてたくさん
async/await使えてうれしいね!ということ
• 筆者は使ったことがないのでありがたみを感じては
いない
最後に
• 非同期処理をマスターしてJavascriptを倒そう

More Related Content

PDF
Java初心者がJava8のラムダ式をやってみた
PDF
できる!並列・並行プログラミング
PDF
Raytracing4
PPTX
サーバサイドの並行プログラミング〜かんたんマルチスレッドプログラミング〜
PDF
continuatioN Linking
PDF
JavascriptでRubyの作り方
PDF
Javascriptのあれやこれやをまとめて説明してみる
PDF
Observableで非同期処理
Java初心者がJava8のラムダ式をやってみた
できる!並列・並行プログラミング
Raytracing4
サーバサイドの並行プログラミング〜かんたんマルチスレッドプログラミング〜
continuatioN Linking
JavascriptでRubyの作り方
Javascriptのあれやこれやをまとめて説明してみる
Observableで非同期処理

What's hot (20)

PDF
Getting start with knockout.js
PPTX
React.jsを勉強しよう
PDF
Predefを使ったsqlのトレース
PDF
ざんねんなワークフロー図鑑
PDF
Clean Architectureで設計してRxJSを使った話
PDF
モダンJavaScript環境構築一歩目
PDF
TypeScript 勉強会
PPTX
非同期系統の基礎
PDF
Sencha_Mokumoku_LT
ZIP
2012/11/03Hiroshima.rb
PDF
Netcommonsアドオンモジュールセミナー第7回
PDF
TypeScript超入門
PDF
TypeScript 入門してみる
PDF
大規模なJavaScript開発の話
PDF
TypeScript 独習会
PDF
Laravel の学び方と得られる学び
PDF
【こっそり始める】Javaプログラマコーディングマイグレーション
PDF
はじめよう TypeScript - 入門から実践まで - 素の JavaScript とはさようなら!
PDF
TypeScript 型定義ファイルのある開発 TypeScript勉強会 VSハッカソン倶楽部
PDF
Phjosh(仮)プロジェクト
Getting start with knockout.js
React.jsを勉強しよう
Predefを使ったsqlのトレース
ざんねんなワークフロー図鑑
Clean Architectureで設計してRxJSを使った話
モダンJavaScript環境構築一歩目
TypeScript 勉強会
非同期系統の基礎
Sencha_Mokumoku_LT
2012/11/03Hiroshima.rb
Netcommonsアドオンモジュールセミナー第7回
TypeScript超入門
TypeScript 入門してみる
大規模なJavaScript開発の話
TypeScript 独習会
Laravel の学び方と得られる学び
【こっそり始める】Javaプログラマコーディングマイグレーション
はじめよう TypeScript - 入門から実践まで - 素の JavaScript とはさようなら!
TypeScript 型定義ファイルのある開発 TypeScript勉強会 VSハッカソン倶楽部
Phjosh(仮)プロジェクト
Ad

Similar to Js async (8)

PPTX
Concurrent Programming in JavaScript
PDF
Concurrent Programm in JavaScript
PDF
実践Akka
PPTX
第52回なんてかんたんなJavaEE
PDF
Dark vol4 for_slideshare
PDF
JavaScriptことはじめ
PDF
JVMの中身を可視化してみた
PDF
JavaScriptで出来る、あんなことこんなこと
Concurrent Programming in JavaScript
Concurrent Programm in JavaScript
実践Akka
第52回なんてかんたんなJavaEE
Dark vol4 for_slideshare
JavaScriptことはじめ
JVMの中身を可視化してみた
JavaScriptで出来る、あんなことこんなこと
Ad

Js async

Editor's Notes

  • #2: 参考URL http://qiita.com/gaogao_9/items/5417d01b4641357900c7 http://qiita.com/gaogao_9/items/40babdf63c73a491acbb http://qiita.com/YoshikiNakamura/items/732ded26c85a7f771a27