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
Takashi Masuda
November 10, 2017
Programming
1.6k
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
6
最近の情報収集方法 2025
masutaka
0
82
自分のブログをCloudFront+HerokuからCloud Runに移行した
masutaka
0
180
BigQuery経由で使うGoogleスプレッドシートのスキーマ管理
masutaka
0
360
本を聴く毎日を送っています
masutaka
0
100
ボッチLookML開発者兼データ整備人を連れてきたよ!
masutaka
0
150
ここがつらいよ普段使いのLinux
masutaka
0
370
4月から取り組んできたLookerの導入から実装までのお話
masutaka
0
190
HerokuでSidekiqを監視する方法を確立した
masutaka
0
650
Other Decks in Programming
See All in Programming
軽量Java基盤の設計 DIコンテナに頼らない、長期保守と1秒起動の実現 JJUG CCC 2026 Spring
macha64
0
570
例外の正しい扱い方 そのエラー try-catchして大丈夫?
jinwatanabe
0
280
技術記事、 専門家としてのプログラマ、 言語化
mizchi
13
6.4k
Go1.27で導入されるジェネリクスメソッドでできること
mackee
0
170
Dataformのリポジトリを立ち上げるときにまずやること / dataform-day0-2026
snhryt
0
180
エンジニアと一緒にテストコードの設計と実装を改善した話
mototakatsu
0
220
TypeScript+Orvalで実現する型安全かつ堅牢でスケーラブルなマルチチャネル通知基盤 / TSKaigi Night talks ~after conference~
d0riven
0
360
生成AI時代にこそ効くGo | Why Go Works in the Age of Generative AI
mom0tomo
8
3.3k
Even G2とAWSで推しのエージェントを召喚しよう!
har1101
1
120
決定論的オーケストレーションの設計と実装 / Design and Implementation of Deterministic Orchestration
nrslib
4
1.5k
メソッドのジェネリクスでGoの夢は広がるか? / Kyoto.go #65
utgwkk
3
920
OSもどきOS
arkw
0
590
Featured
See All Featured
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
210
HTML-Aware ERB: The Path to Reactive Rendering @ RubyCon 2026, Rimini, Italy
marcoroth
1
230
What does AI have to do with Human Rights?
axbom
PRO
1
2.2k
What’s in a name? Adding method to the madness
productmarketing
PRO
24
4.1k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
49
10k
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.8k
The Cult of Friendly URLs
andyhume
79
6.9k
Side Projects
sachag
455
43k
Why Your Marketing Sucks and What You Can Do About It - Sophie Logan
marketingsoph
0
170
Fireside Chat
paigeccino
42
4k
The Illustrated Guide to Node.js - THAT Conference 2024
reverentgeek
1
390
Abbi's Birthday
coloredviolet
3
8.2k
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