Download free for 30 days
Sign in
Upload
Language (EN)
Support
Business
Mobile
Social Media
Marketing
Technology
Art & Photos
Career
Design
Education
Presentations & Public Speaking
Government & Nonprofit
Healthcare
Internet
Law
Leadership & Management
Automotive
Engineering
Software
Recruiting & HR
Retail
Sales
Services
Science
Small Business & Entrepreneurship
Food
Environment
Economy & Finance
Data & Analytics
Investor Relations
Sports
Spiritual
News & Politics
Travel
Self Improvement
Real Estate
Entertainment & Humor
Health & Medicine
Devices & Hardware
Lifestyle
Change Language
Language
English
Español
Português
Français
Deutsche
Cancel
Save
Submit search
EN
Uploaded by
kamiyam .
PDF, PPTX
2,465 views
Async Enhancement
GRAND FRONT_END OSAKA 2015 Summer
Technology
◦
Read more
0
Save
Share
Embed
Embed presentation
Download
Download as PDF, PPTX
1
/ 71
2
/ 71
3
/ 71
4
/ 71
5
/ 71
6
/ 71
7
/ 71
8
/ 71
9
/ 71
10
/ 71
11
/ 71
12
/ 71
13
/ 71
14
/ 71
15
/ 71
16
/ 71
17
/ 71
18
/ 71
19
/ 71
20
/ 71
21
/ 71
22
/ 71
23
/ 71
24
/ 71
25
/ 71
26
/ 71
27
/ 71
28
/ 71
29
/ 71
30
/ 71
31
/ 71
32
/ 71
33
/ 71
34
/ 71
35
/ 71
36
/ 71
37
/ 71
38
/ 71
39
/ 71
40
/ 71
41
/ 71
42
/ 71
43
/ 71
44
/ 71
45
/ 71
46
/ 71
47
/ 71
48
/ 71
49
/ 71
50
/ 71
51
/ 71
52
/ 71
53
/ 71
54
/ 71
55
/ 71
56
/ 71
57
/ 71
58
/ 71
59
/ 71
60
/ 71
61
/ 71
62
/ 71
63
/ 71
64
/ 71
65
/ 71
66
/ 71
67
/ 71
68
/ 71
69
/ 71
70
/ 71
71
/ 71
More Related Content
PDF
React.jsでクライアントサイドなWebアプリ入門
by
spring_raining
PDF
Xamarin で ReactiveUI を使ってみた
by
Hironov OKUYAMA
PPTX
React を導入したフロントエンド開発
by
daisuke-a-matsui
PDF
大規模Node.jsを支える ロードバランスとオートスケールの独自実装
by
kidach1
PDF
UnrealEngineが5日間でasm.js化できたと聞いた俺たちは…
by
Kei Nakazawa
PDF
はじめてのVue.js
by
kamiyam .
PDF
SEOとJava Script。 〜文書構造とチームと、時々、闇〜
by
Yuki Minakawa
PDF
DevLOVE Kansai KnockoutJS
by
Go Tanaka
React.jsでクライアントサイドなWebアプリ入門
by
spring_raining
Xamarin で ReactiveUI を使ってみた
by
Hironov OKUYAMA
React を導入したフロントエンド開発
by
daisuke-a-matsui
大規模Node.jsを支える ロードバランスとオートスケールの独自実装
by
kidach1
UnrealEngineが5日間でasm.js化できたと聞いた俺たちは…
by
Kei Nakazawa
はじめてのVue.js
by
kamiyam .
SEOとJava Script。 〜文書構造とチームと、時々、闇〜
by
Yuki Minakawa
DevLOVE Kansai KnockoutJS
by
Go Tanaka
What's hot
PPTX
今からでも遅くない! React事始め
by
ynaruta
PDF
モダンJavaScript環境構築一歩目
by
大樹 小倉
PDF
ng-japan 2015 TypeScript+AngularJS 1.3
by
Masahiro Wakame
PDF
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
by
Hiroh Satoh
PDF
jQuery Performance Tips – jQueryにおける高速化 -
by
Hayato Mizuno
PDF
大規模なJavaScript開発の話
by
terurou
PDF
ECMAScript6による関数型プログラミング
by
TanUkkii
PPTX
AngularJS2でつまづいたこと
by
Takehiro Takahashi
PDF
PIAXで作る P2Pネットワーク
by
祐司 伊藤
PPTX
Vue.js 2.0を試してみた
by
Toshiro Shimizu
PDF
覚醒JavaScript -ES6で作るIsomophicアプリケーション-
by
Oonishi Keitarou
PDF
はじめよう Backbone.js
by
Hiroki Toyokawa
PDF
React Redux Redux-Saga + サーバサイドレンダリング
by
エンジニア勉強会 エスキュービズム
PDF
ES6 in Practice
by
Teppei Sato
PDF
翻訳から始めるVue.js 入門
by
Makoto Chiba
PDF
REACT & WEB API
by
Shigeru Kondoh
PDF
React入門-JSONを取得して表示する
by
regret raym
PDF
One night Vue.js
by
Masahiro Kyuden
PDF
One Time Binding & Digest Loop
by
Kon Yuichi
PDF
コンパイラ指向ReVIEW
by
Masahiro Wakame
今からでも遅くない! React事始め
by
ynaruta
モダンJavaScript環境構築一歩目
by
大樹 小倉
ng-japan 2015 TypeScript+AngularJS 1.3
by
Masahiro Wakame
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
by
Hiroh Satoh
jQuery Performance Tips – jQueryにおける高速化 -
by
Hayato Mizuno
大規模なJavaScript開発の話
by
terurou
ECMAScript6による関数型プログラミング
by
TanUkkii
AngularJS2でつまづいたこと
by
Takehiro Takahashi
PIAXで作る P2Pネットワーク
by
祐司 伊藤
Vue.js 2.0を試してみた
by
Toshiro Shimizu
覚醒JavaScript -ES6で作るIsomophicアプリケーション-
by
Oonishi Keitarou
はじめよう Backbone.js
by
Hiroki Toyokawa
React Redux Redux-Saga + サーバサイドレンダリング
by
エンジニア勉強会 エスキュービズム
ES6 in Practice
by
Teppei Sato
翻訳から始めるVue.js 入門
by
Makoto Chiba
REACT & WEB API
by
Shigeru Kondoh
React入門-JSONを取得して表示する
by
regret raym
One night Vue.js
by
Masahiro Kyuden
One Time Binding & Digest Loop
by
Kon Yuichi
コンパイラ指向ReVIEW
by
Masahiro Wakame
Similar to Async Enhancement
PDF
【Unite Tokyo 2018】さては非同期だなオメー!async/await完全に理解しよう
by
Unity Technologies Japan K.K.
PDF
async/await不要論
by
bleis tift
PPTX
モダン JavaScript における非同期処理 - Promise, async/await -
by
Kazunori Hashikuchi
PDF
パターンでわかる! .NET Coreの非同期処理
by
Kouji Matsui
PDF
AngularJSでの非同期処理の話
by
Yosuke Onoue
PDF
JS非同期処理のいま
by
Masakazu Muraoka
PDF
これからの「async/await」の話をしよう
by
Kouji Matsui
PDF
いまさら恥ずかしくてAsyncをawaitした
by
Kouji Matsui
PPTX
async/await のしくみ
by
信之 岩永
PDF
Flow.js
by
uupaa
PDF
Promiseでコールバック地獄から解放された話
by
Sota Sugiura
PDF
Async await完全に理解した
by
asuka y
PDF
Async flow controll basic and practice
by
Masakazu Muraoka
PDF
Introduction pp.js
by
Mizushima Kazuhiro
PPTX
JavaScript非同期処理 入門
by
Ishibashi Ryosuke
PPTX
Js async
by
Shunji Makino
PPTX
Reactive
by
Akihiro Ikezoe
PDF
JavaScriptの非同期処理
by
Takumi Yokoyama
PDF
Promise async await
by
ikdysfm
PDF
About promise
by
Cy-BB
【Unite Tokyo 2018】さては非同期だなオメー!async/await完全に理解しよう
by
Unity Technologies Japan K.K.
async/await不要論
by
bleis tift
モダン JavaScript における非同期処理 - Promise, async/await -
by
Kazunori Hashikuchi
パターンでわかる! .NET Coreの非同期処理
by
Kouji Matsui
AngularJSでの非同期処理の話
by
Yosuke Onoue
JS非同期処理のいま
by
Masakazu Muraoka
これからの「async/await」の話をしよう
by
Kouji Matsui
いまさら恥ずかしくてAsyncをawaitした
by
Kouji Matsui
async/await のしくみ
by
信之 岩永
Flow.js
by
uupaa
Promiseでコールバック地獄から解放された話
by
Sota Sugiura
Async await完全に理解した
by
asuka y
Async flow controll basic and practice
by
Masakazu Muraoka
Introduction pp.js
by
Mizushima Kazuhiro
JavaScript非同期処理 入門
by
Ishibashi Ryosuke
Js async
by
Shunji Makino
Reactive
by
Akihiro Ikezoe
JavaScriptの非同期処理
by
Takumi Yokoyama
Promise async await
by
ikdysfm
About promise
by
Cy-BB
More from kamiyam .
PDF
知っているつもりで実は知らない 拾う技術捨てる技術
by
kamiyam .
PDF
Socket.ioとBabylonJSで作ったIoT的ななにか
by
kamiyam .
PDF
Node.js勉強会 Framework Koa
by
kamiyam .
PDF
Node.js をさりげなく取り入れた 最近のフロントエンド事情について
by
kamiyam .
PDF
Node.jsで始める Modern JavaScript Framework
by
kamiyam .
PDF
Gruntの罪と罰
by
kamiyam .
PDF
Scalable Node.js with Redis Store
by
kamiyam .
PPTX
TypeScript + Express
by
kamiyam .
PDF
Grunt.jsを使った Expressの開発環境構築
by
kamiyam .
PDF
Kinectを使った インタラクティブコンテンツを作った話
by
kamiyam .
PDF
kyoto.js13
by
kamiyam .
PDF
Managing multi-package repositories
by
kamiyam .
PDF
WordBench Osaka #48 About Calypso
by
kamiyam .
PDF
PhpStormとGrunt.jsで作るCakePHP快適開発環境
by
kamiyam .
PDF
JavaScriptが魅せる新たな世界
by
kamiyam .
PDF
HomeKitとNode.jsを使ってSiriでコントロールするなにか
by
kamiyam .
PDF
JavaScript Performance 20160723
by
kamiyam .
PDF
プラベワークのススメ
by
kamiyam .
PDF
Node.jsでKinectを触ろうとして色々しくじった話
by
kamiyam .
PDF
ヒカ☆ラボ@Osaka NodeBotsハンズオン
by
kamiyam .
知っているつもりで実は知らない 拾う技術捨てる技術
by
kamiyam .
Socket.ioとBabylonJSで作ったIoT的ななにか
by
kamiyam .
Node.js勉強会 Framework Koa
by
kamiyam .
Node.js をさりげなく取り入れた 最近のフロントエンド事情について
by
kamiyam .
Node.jsで始める Modern JavaScript Framework
by
kamiyam .
Gruntの罪と罰
by
kamiyam .
Scalable Node.js with Redis Store
by
kamiyam .
TypeScript + Express
by
kamiyam .
Grunt.jsを使った Expressの開発環境構築
by
kamiyam .
Kinectを使った インタラクティブコンテンツを作った話
by
kamiyam .
kyoto.js13
by
kamiyam .
Managing multi-package repositories
by
kamiyam .
WordBench Osaka #48 About Calypso
by
kamiyam .
PhpStormとGrunt.jsで作るCakePHP快適開発環境
by
kamiyam .
JavaScriptが魅せる新たな世界
by
kamiyam .
HomeKitとNode.jsを使ってSiriでコントロールするなにか
by
kamiyam .
JavaScript Performance 20160723
by
kamiyam .
プラベワークのススメ
by
kamiyam .
Node.jsでKinectを触ろうとして色々しくじった話
by
kamiyam .
ヒカ☆ラボ@Osaka NodeBotsハンズオン
by
kamiyam .
Recently uploaded
PDF
基礎から学ぶ PostgreSQL の性能監視 (PostgreSQL Conference Japan 2025 発表資料)
by
NTT DATA Technology & Innovation
PDF
PCCC25(設立25年記念PCクラスタシンポジウム):東京大学情報基盤センター テーマ1/2/3「Society5.0の実現を目指す『計算・データ・学習...
by
PC Cluster Consortium
PPTX
DrupalCon Nara 2025の記録 .
by
iPride Co., Ltd.
PDF
visionOS TC「新しいマイホームで過ごすApple Vision Proとの新生活」
by
Sugiyama Yugo
PDF
安価な ロジック・アナライザを アナライズ(?),Analyze report of some cheap logic analyzers
by
たけおか しょうぞう
PDF
第25回FA設備技術勉強会_自宅で勉強するROS・フィジカルAIアイテム.pdf
by
TomohiroKusu
PDF
PCCC25(設立25年記念PCクラスタシンポジウム):株式会社アルゴグラフィックス テーマ1「ARGO北見テクノセンターのご紹介」
by
PC Cluster Consortium
基礎から学ぶ PostgreSQL の性能監視 (PostgreSQL Conference Japan 2025 発表資料)
by
NTT DATA Technology & Innovation
PCCC25(設立25年記念PCクラスタシンポジウム):東京大学情報基盤センター テーマ1/2/3「Society5.0の実現を目指す『計算・データ・学習...
by
PC Cluster Consortium
DrupalCon Nara 2025の記録 .
by
iPride Co., Ltd.
visionOS TC「新しいマイホームで過ごすApple Vision Proとの新生活」
by
Sugiyama Yugo
安価な ロジック・アナライザを アナライズ(?),Analyze report of some cheap logic analyzers
by
たけおか しょうぞう
第25回FA設備技術勉強会_自宅で勉強するROS・フィジカルAIアイテム.pdf
by
TomohiroKusu
PCCC25(設立25年記念PCクラスタシンポジウム):株式会社アルゴグラフィックス テーマ1「ARGO北見テクノセンターのご紹介」
by
PC Cluster Consortium
Async Enhancement
1.
Async Enhancement Grand-Frontend-Osaka 2015
Summer 2015.8.22
2.
自己紹介 • かみやん (Twitter@kamiyam) http://nantokaworks.com •
主にJavaScriptでお仕事をしている人 • カメラ/自動車 Engineer
3.
AGENDA • JavaScriptと非同期処理 • 非同期の強みと弱み •
非同期処理実行のエンドポイント • ライブラリコールバック • 非同期処理中のエラーハンドリング • 複数非同期処理のコールバック
4.
AGENDA • 非同期処理実行時のscopeのお話 • Promise •
革命的だった async モジュール • Promise準拠 • Q • まとめ
5.
JavaScriptと非同期処理
6.
同期処理 2sec 5sec 1sec
7.
同期処理 2sec 5sec 1sec
8.
2sec 5sec 非同期処理 1sec
9.
2sec 5sec 非同期処理 1sec
10.
非同期の強みと弱み
11.
// sorry node.js
code var fs = require(“fs”); // Sync read directory var files = fs.readdirSync(“.”); console.log(files); console.log(“conmplate”); // Async read directory fs.readdir(“.", function(err, files){ if (err) throw err; console.log(files); }); console.log(“complate…?”);
12.
プログラムのメインフローを邪魔せず 非同期で処理をnon blockingで実行 (する代わりに人が追いにくい流れに)
13.
ドミノ倒しを想像するとわかりやすい
14.
非同期処理実行の エンドポイント
15.
// document ready $(function(){ var
$target = $(".initAnimetion”); $target.fadeIn( "slow", function() { setTimeout(function(){ $target.fadeOut( "slow", function() { console.log( "completed!!!" ); }) }), 2*1000 ); //2秒待つ }); });
16.
非同期の処理が終わった時に 実行されるコールバック関数が必要
17.
ライブラリコールバック
18.
処理終了後の振る舞いは 利用者に委ねなければならない =コールバック関数が常に必要
19.
// example (function($){ $.mySuperElegantLibrary =
(function(){ var hoge = “”; var fuga = “”; return { miracleMethod: function(arg1,cb){ if(typeof(arg1) === 'function') cb = arg1; if((cb == null)) cb = $.noop; }, specialMethod: function(arg1,cb){ if(typeof(arg1) === 'function') cb = arg1; if((cb == null)) cb = $.noop; } } })(); })(jQuery);
20.
変数 cb は関数なのか文字列なのか undefinedなのかそうじゃないのか…
21.
つきまとうコールバックとの闘い
22.
非同期処理中の エラーハンドリング
23.
JavaScript にも try…catch
あります
24.
// example catching
error (function(){ try{ throw new Error("エラーです"); }catch(e){ console.log(e); console.log("ここで正しい処理をします") } })();
25.
// example catching
error…??? // callback method inner is wonder land (function(){ try{ setTimeout(function(){ throw new Error("エラーです"); },1000); }catch(e){ console.log(e); console.log("ここでただしい処理をしますし(時間差)"); }})();
26.
oh……
27.
複数非同期処理の コールバック
28.
// async methods var
A = function(cb){ setTimeout(function(){ cb("1秒掛かる処理を実行しました"); },1000); }; var B = function(cb){ setTimeout(function(){ cb("5秒掛かる処理を実行しました"); },5000); }; var C = function(cb){ setTimeout(function(){ cb("2秒掛かる処理を実行しました"); },2000); };
29.
MISSION 処理A,B,C それぞれの結果を A,B,Cの順に配列に入れよ
30.
//oh! very easy var
result =[]; A(function(message1){ console.log(message1); result.push(message1); B(function(message2){ console.log(message2); result.push(message2); C(function(message3){ console.log(message3); result.push(message3); console.log("全ての処理がおわりました"); console.log(result); }); }); });
31.
同期処理 2sec 5sec 1sec
32.
同期処理 2sec 5sec 1sec
33.
// parallels var allRequest
= [A,B,C]; var result =[]; var counter = allRequest.length; allRequest.forEach(function(request,i){ console.log(i); // 0,1,2 request(function(message){ // Message出力(単体) console.log(message); result[i] = message; console.log(i); //0,2,1 <—-? if(--counter == 0){ // Message出力(全体) console.log("全ての処理がおわりました"); console.log(result); } }); });
34.
2sec 5sec 非同期処理 1sec
35.
2sec 5sec 非同期処理 1sec
36.
直列同期処理 処理内容 処理時間 処理① 処理② 処理③ 完了
37.
直列同期処理 処理内容 処理時間 処理① 処理② 処理③ ※ 前述サンプルのような処理の結果を以って 次の処理を行う場合は別 同時に実行出来る処理は実行してしまいたい 完了
38.
並列同期処理 処理内容 処理時間 処理① 処理② 処理③ 完了
39.
並列同期処理 処理内容 処理時間 処理① 処理② 処理③ 完了 それぞれの処理を同時に実行し、一番遅い処理が 完了するまで他は待機
40.
ここで一旦話は変わり…
41.
非同期処理実行時の scopeのお話
42.
JavaScript ループで回した時、 最後の方の要素しかなんか動かない問題
43.
// no problem (function($){ $(function(){ //
display none $("#content").children().hide(); //forEach $("#content").children().each(function(i,item){ // show $(item).fadeIn("slow"); }) }) })(jQuery)
44.
// no problem (function($){ $(function(){ //
display none $("#content").children().hide(); //forEach $("#content").children().each(function(i,item){ // show setTimeout(function(){ $(item).fadeIn("slow"); }, i * 1000); }) }) })(jQuery)
45.
大丈夫そう
46.
// problems happen… //
why!!! JavaScript looping!! (function($){ $(function(){ // display none $("#content").children().hide(); var children = $("#content").children(); for(var i=0; i < children.length; i++){ //for loop // show setTimeout(function(){ var item = children[i]; $(item).fadeIn("slow"); }, i * 1000); } }) })(jQuery)
47.
// changing code… (function($){ $(function(){ //
display none $(“#content”).children().hide(); var show = function(i){ // show setTimeout(function(){ var item = children[i]; $(item).fadeIn("slow"); }, i * 1000); } var children = $("#content").children(); for(var i=0; i < children.length; i++){ //for loop show(i) } }) })(jQuery)
48.
// before parallels
process var allRequest = [A,B,C]; var result =[]; var counter = allRequest.length; for(var i=0; i<allRequest.length; i++){ console.log(i); // 0,1,2 allRequest[i](function(message){ // Message出力(単体) console.log(message); result[i] = message; console.log(i); //3,3,3 <- !!! if(--counter == 0){ // Message出力(全体) console.log("全ての処理がおわりました"); console.log(result); } }); }
49.
くろーじゃー…
50.
Promise
51.
複数の非同期処理の最後 もうちょっとなんとかなりませんか?
52.
成功と失敗への遷移の確約
53.
Promises/A+ https://promisesaplus.com/ https://developer.mozilla.org/ja/docs/Web/JavaScript/ Reference/Global_Objects/Promise MDN Promise http://caniuse.com/#feat=promises Can I
Use
54.
try~catchはエラーの確約だったはず…
55.
// promise…then…catch var promise
= new Promise(function(resolve,reject){ // example async progress doSomhing(function(error, data){ if(error) return reject(error); resolve(data); }) }); promise.then(function(data){ // with success }).catch(function(error){ // fail… })
56.
// parallel…then…catch var promise1
= new Promise(function(resolve,reject){ // example async progress doSomhing(function(error, data1){ if(error) return reject(error); resolve(data1); }) }); var promise2 = new Promise(function(resolve,reject){ // 省略 resolve(data2) }); Promise.all([promise1,promise2]).then(function(result){ // with success console.log(result); // [data1,data2] }).catch(function(error){ // fail… })
57.
resolve / reject
に 結果の約束を結びつける
58.
革命的だった async モジュール (私の中では)
59.
async.waterfall([function(next){ console.log(“1”); setTimeout(function(){ console.log(“1 complete”); next(null, 1);
//next(error, result); },3000); },function(next){ console.log(“2”) setTimeout(function(){ console.log(“2 complete”); next(null, 2); //next(error, result); },3000); }], function(err, result1, result2 ){ console.log(err); // …null console.log(result1); //…1 console.log(result2); //…2 });
60.
async. parallel([function(callback){ console.log(“1”); setTimeout(function(){ console.log(“1 complete”); callback(null,
1); //arg1…error,arg2….result },3000); },function(next){ console.log(“2”) setTimeout(function(){ console.log(“2 complete”); callback(null, 2); },1000); }], function(err, result){ console.log(err); // …null console.log(result); //…[“1”,”2”] });
61.
Promise準拠
62.
JavaScript Promises ※
公開日 2013/12/16 http://www.html5rocks.com/ja/tutorials/es6/promises/ Conformant Implementations https://promisesaplus.com/implementations
63.
Q
64.
// promise…then…catch var promise
= function(){ var deferred = q.deferred(); // example async progress doSomething(function(error, data){ if(error) return deferred.reject(error); deferred.resolve(data); }) return deferred.promise; }); promise.then(function(result){ // with success console.log(result); // data }).catch(function(error){ // fail… })
65.
// parallel…then…catch var promise1
= function(){ var deferred = q.deferred(); // set deferred.reject(data1) & deferred.resolve(error) return deferred.promise; }); var promise2 = function(){ var deferred = q.deferred(); // set deferred.reject(data2) & deferred.resolve(error) return deferred.promise; }); q.all([promise1(), promise2()]).then(function(result){ // with success console.log(result); // [data1,data2] }).catch(function(error){ // fail… })
66.
まとまらないまとめ
67.
非同期処理が複数実行される時、 その実行と完了を追うことが非常に重要
68.
Promise準拠ライブラリをうまく使い分 けて半同期処理的なアプローチを
69.
他にGenerator /Yield もあるよ
70.
参考 • JavaScriptと非同期のエラー処理 http://techblog.yahoo.co.jp/programming/javascript_error/ • あなたの知らない
JavaScript Promise https://gist.github.com/kuu/e182d361520e70a158c9 • Effective ES6 http://www.slideshare.net/teppeis/effective-es6
71.
ご清聴ありがとうございました
Download