Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
PromiseとAsync-Awaitまとめ(Emacsで)
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Takashi Masuda
November 10, 2017
Programming
1.7k
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
PromiseとAsync-Awaitまとめ(Emacsで)
フィードフォースの社内LT大会で発表しました
Takashi Masuda
November 10, 2017
More Decks by Takashi Masuda
See All by Takashi Masuda
マスタカネットの紹介 〜悠久なる変更履歴〜
masutaka
0
16
最近の情報収集方法 2025
masutaka
0
93
自分のブログをCloudFront+HerokuからCloud Runに移行した
masutaka
0
190
BigQuery経由で使うGoogleスプレッドシートのスキーマ管理
masutaka
0
370
本を聴く毎日を送っています
masutaka
0
110
ボッチLookML開発者兼データ整備人を連れてきたよ!
masutaka
0
150
ここがつらいよ普段使いのLinux
masutaka
0
380
4月から取り組んできたLookerの導入から実装までのお話
masutaka
0
190
HerokuでSidekiqを監視する方法を確立した
masutaka
0
660
Other Decks in Programming
See All in Programming
Go を使い始めて 2 ヶ月の学び / My first two months with Go
contour_gara
0
390
源内ハンズオン概要編
hideg
0
220
レビュー履歴をAIに食わせて、 Compose移行を加速するs
shihochan
0
230
freee が目指す データ マネジメント戦略 AI-Ready 時代を支える 攻めのガバナンスとは
freee
PRO
0
520
進化を続けるGo toolsの現在地 / The Current State of Ever-Evolving Go Tools
hond0413
0
270
複数の Claude Code が"放置"されてしまう問題をCLI ダッシュボードを自作して解決した話
sumihiro3
1
740
Claude CodeとAgentCore Gatewayを繋ぐ際の認証認可 / Authentication and authorization when connecting Claude Code with AgentCore Gateway
har1101
2
390
AWS Transform Customによる Spring Boot 2.xから4.xへのVerUp
satoshi256kbyte
2
110
仕様書を書く前にハーネスを作る - Agent Native開発は「探索を速く、判定を固く」
gotalab555
5
1.8k
言葉の格闘技のススメ~紙とペンと言葉から始める、キャリアの描き方~
progresscicada
2
190
Press start. Python's next generation.
willingc
PRO
3
250
承認済みなのに差戻しできてしまうバグ、型で潰せます
shinchit
0
120
Featured
See All Featured
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
Lightning Talk: Beautiful Slides for Beginners
inesmontani
PRO
2
650
Self-Hosted WebAssembly Runtime for Runtime-Neutral Checkpoint/Restore in Edge–Cloud Continuum
chikuwait
0
750
30 Presentation Tips
portentint
PRO
1
380
Introduction to Domain-Driven Design and Collaborative software design
baasie
1
950
Neural Spatial Audio Processing for Sound Field Analysis and Control
skoyamalab
0
420
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.9k
What does AI have to do with Human Rights?
axbom
PRO
1
2.3k
Agile Leadership in an Agile Organization
kimpetersen
PRO
0
210
Done Done
chrislema
186
16k
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
2
490
Transcript
1SPNJTFͱ "TZOD"XBJU·ͱΊ !NBTVUBLB
w օ͞Μ͝ଘͷ௨Γɺ&NBDTͰඇಉظ ॲཧΛ࣮ݱ͢ΔͨΊʹɺ5$1ίωΫ γϣϯΛ։͔͘ɺ֎෦ίϚϯυΛىಈ ͢Δඞཁ͕͋Γ·͢
֎෦ίϚϯυΛىಈ͢Δ
w ΤσΟλͰԿ͔ॻ͍͍ͯΔ࣌ɺόοΫάϥϯ υͰԿ͔ͨ͘͠ͳΓ·͢ΑͶʁ w ྫ͑ɺ(JU)VCͰ4UBSͨ͠ϦϙδτϦͯϒ ͨ͠63-ΛΤσΟλ͔Β։ͨ͘ΊɺΩϟογϡ ϑΝΠϧΛDVSMͰఆظతʹ࡞Δͱ͔
ಉظॲཧͭΒ͍ (defun mstk-start-sync () (call-process "sh" nil nil nil "-c"
"sleep 3; echo OK") (message-box "mstk-start-sync finished.")) (mstk-start-sync) 3ඵؒԿग़དྷͣʹɺ Emacs͕ݻ·Δɻ
ඇಉظॲཧͭΒ͍ (defun mstk-start-async-1a () (setq proc (start-process "mstk-start-async-1a" (generate-new-buffer "
*sh*") "sh" "-c" "sleep 3; echo OK")) (set-process-sentinel proc 'mstk-async-sentinel-1a)) (defun mstk-async-sentinel-1a (_process _event) (message-box "mstk-start-async-1a finished.")) (mstk-start-async-1a) Emacsݻ·Βͳ͘ͳΔ͕ɺ sentinelʢ൪ฌʣؔඞཁ
ඇಉظॲཧͭΒ͍ (defun mstk-start-async-1b () (setq proc (start-process "mstk-start-async-1b" (generate-new-buffer "
*sh*") "sh" "-c" "sleep 3; echo OK")) (set-process-sentinel proc (lambda (_process _event) (message-box "mstk-start- async-1b finished.")))) (mstk-start-async-1b) lambdaͰؔఆٛ লུͰ͖Δ
ඇಉظॲཧͭΒ͍ (defun mstk-start-async-2b () (make-process :name "mstk-start-async-2b" :buffer (generate-new-buffer "
*sh*") :command '("sh" "-c" "sleep 3; echo OK") :sentinel (lambda (_process _event) (message-box "mstk-start- async-2b finished.")))) (mstk-start-async-2b) make-process͏ͱ ͍ͣͿΜεοΩϦ͢Δɻ ͱ͜ΖͰԿͬͯͨΜ͚ͩͬʁ
֎෦ίϚϯυΛඇಉظͰ ࣮ߦ͍͚ͨͩ͠ͳͷʹʂ
FNBDTQSPNJTF https://github.com/chuntaro/emacs-promise
QSPNJTF (require 'promise) (defun mstk-start-promise-1a () (promise-chain (promise:make-process "sh" "-c"
"sleep 3; echo OK") (then (lambda (reason) (message-box "then %s" reason))))) (mstk-start-promise-1a) ಡΈ͍͢ɾɾɾͷ͔ʁ
QSPNJTF Τϥʔॲཧ (require 'promise) (defun mstk-start-promise-2a () (promise-chain (promise:make-process "sh"
"-c" "sleep 3; echo OK") (then (lambda (reason) (/ 1 0) ;; an error occurs!! (message-box "then %s" reason))) (promise-catch (lambda (reason) (message-box "catch error!! %s" reason))) (done (lambda (reason) (message-box "done. %s" reason))))) (mstk-start-promise-2a) ͔Γ͍͢ɾɾɾʁ
FNBDTBTZODBXBJU https://github.com/chuntaro/emacs-async-await
BTZODBXBJU (require 'async-await) (setq lexical-binding t) (async-defun mstk-start-async-await-1a () (await
(promise:make-process "sh" "-c" "sleep 3; echo OK")) (message-box "finish")) (mstk-start-async-await-1a) ͖ͬ͢Γ͠ਿ
BTZODBXBJU Τϥʔॲཧ (require 'async-await) (setq lexical-binding t) (async-defun mstk-start-async-await-2a ()
(condition-case reason (progn (await (promise:make-process "sh" "-c" "sleep 3; echo OK")) (/ 1 0) ;; an error occurs!! (message-box "finish")) (error (message-box "catch error!! %s" reason)))) (mstk-start-async-await-2a) Τϥʔॲཧ͍ͭͲ͓Γʂ
σϞ
ॴײ w ҎલΑΓඇಉظॲཧͷ໘ष͞গͳ͘ͳͬ ͨͱײͨ͡ w γϯλοΫεΛఆٛͰ͖Δݴޠɺදݱͷࣗ༝ ͕ߴ·Δ w -JTQσʔλؔશ෦4ࣜͰදݱͰ͖Δɻඒ ͍͠
એ w IUUQTHJUIVCDPNNBTVUBLBFNBDTIFMN IBUFOBCPPLNBSL w IUUQTHJUIVCDPNNBTVUBLBFNBDTIFMNRJJUB w BTZODFMͬͨΒIFMNHJUIVCTUBSTFMΛมߋ ͤͣʹඇಉظԽͰ͖ͨIUUQTNBTVUBLBOFU DIBMPXIUNM
4QFDJBM5IBOLT w ஜࢵ"ؙΰγοΫʢຊจʣ w .FOMPʢίʔυʣ w IJHIMJHIUʢίʔυϋΠϥΠτʣ w IJHIMJHIU0SUGIPHFFMcQCDPQZ http://kakakakakku.hatenablog.com/entry/2017/05/30/092247