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
SwiftのAsync / Awaitについて
Search
Takaaki Tanaka
April 14, 2018
Technology
0
190
SwiftのAsync / Awaitについて
第1回 HAKATA.swift ~福岡でSwiftの勉強会~
Takaaki Tanaka
April 14, 2018
Tweet
Share
More Decks by Takaaki Tanaka
See All by Takaaki Tanaka
Zenn のウラガワ ~エンジニアのアウトプットを支える環境で Google Cloud が採用されているワケ~ #burikaigi #burikaigi_h
kongmingstrap
20
7.5k
AWS re:Invent 2024 ふりかえり
kongmingstrap
0
200
製造の課題に立ち向かう Manufacturing Data Engine と Manufacturing Connect の ご紹介
kongmingstrap
0
770
Tellus の衛星データを見てみよう #mf_fukuoka
kongmingstrap
0
660
JAWS-UG 福岡 #16 re:Invent 現地に行った人のお話 #jawsugfuk #jawsug
kongmingstrap
0
550
AppMod の開発のイマを知るために現地に潜入した私が見たものは・・・? #GoogleCloudNext
kongmingstrap
0
590
Kong Gateway から読みとく、 API統合・API連携サービスの最新情報 #devio2023
kongmingstrap
0
1.7k
Cloud Run に憧れて Google Cloud を推進している話 / CX事業本部で使われている技術
kongmingstrap
0
250
AWS / Google Cloud / Azure それぞれの推しサービス.pdf
kongmingstrap
1
1.4k
Other Decks in Technology
See All in Technology
OpenID BizDay#17 KYC WG活動報告(法人) / 20250219-BizDay17-KYC-legalidentity
oidfj
0
410
【内製開発Summit 2025】イオンスマートテクノロジーの内製化組織の作り方/In-house-development-summit-AST
aeonpeople
1
210
次世代KYC活動報告 / 20250219-BizDay17-KYC-nextgen
oidfj
0
430
オブザーバビリティの観点でみるAWS / AWS from observability perspective
ymotongpoo
9
1.7k
エンジニアリング価値を黒字化する バリューベース戦略を用いた 技術戦略策定の道のり
kzkmaeda
3
820
抽象化をするということ - 具体と抽象の往復を身につける / Abstraction and concretization
soudai
27
14k
Perlの生きのこり - エンジニアがこの先生きのこるためのカンファレンス2025
kfly8
1
230
あれは良かった、あれは苦労したB2B2C型SaaSの新規開発におけるCloud Spanner
hirohito1108
2
820
(機械学習システムでも) SLO から始める信頼性構築 - ゆる SRE#9 2025/02/21
daigo0927
0
220
php-conference-nagoya-2025
fuwasegu
0
120
設計を積み重ねてシステムを刷新する
sansantech
PRO
0
110
システム・ML活用を広げるdbtのデータモデリング / Expanding System & ML Use with dbt Modeling
i125
1
290
Featured
See All Featured
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
4
350
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
33
2.1k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
233
17k
Fireside Chat
paigeccino
34
3.2k
Git: the NoSQL Database
bkeepers
PRO
427
65k
How GitHub (no longer) Works
holman
314
140k
Optimising Largest Contentful Paint
csswizardry
34
3.1k
Learning to Love Humans: Emotional Interface Design
aarron
273
40k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
30
2.2k
StorybookのUI Testing Handbookを読んだ
zakiyama
28
5.5k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
129
19k
Scaling GitHub
holman
459
140k
Transcript
SwiftͷAsync / Await ʹ͍ͭͯ ୈ1ճ HAKATA.swift
"CPVUNF
wΫϥεϝιουגࣜձࣾ wϞόΠϧΞϓϦαʔϏε෦ wJ04ΞϓϦΤϯδχΞ wαʔόʔαΠυΞϓϦΤϯδχΞ wαʔόʔϨε։ൃ෦ wΞϓϦέʔγϣϯΤϯδχΞ ాத໌ @kongmingtrap
wΫϥεϝιουגࣜձࣾ wϞόΠϧΞϓϦαʔϏε෦ wJ04ΞϓϦΤϯδχΞ wαʔόʔαΠυΞϓϦΤϯδχΞ wαʔόʔϨε։ൃ෦ wΞϓϦέʔγϣϯΤϯδχΞ ాத໌ @kongmingtrap
wΫϥεϝιουגࣜձࣾ wϞόΠϧΞϓϦαʔϏε෦ wJ04ΞϓϦΤϯδχΞ wαʔόʔαΠυΞϓϦΤϯδχΞ wαʔόʔϨε։ൃ෦ wΞϓϦέʔγϣϯΤϯδχΞ ాத໌ @kongmingtrap :".-༑ୡʂʂ
Ϟνϕʔγϣϯ
None
ձࣾͷۚͰߦ͘ ւ֎ΧϯϑΝϨϯε ࠷ߴͩͥʜ
4XJGUͷ "TZOD"XBJUʹ͍ͭͯ
Ϟνϕʔγϣϯ
IUUQTBXTBNB[PODPNKQBCPVUBXTXIBUTOFXBXTMBNCEB TVQQPSUTOPEFKT
IUUQTBXTBNB[PODPNKQBCPVUBXTXIBUTOFXBXTMBNCEB TVQQPSUTOPEFKT
ͳΔ΄Ͳ
4XJGU Ͳ͏ͳ͍ͬͯΔΜͩΖ͏ʁ
"TZOD"XBJUGPS4XJGU
"TZOD"XBJUGPS4XJGU
എܠ
ඇಉظॲཧʹ·ͭΘΔ ՝ͷʑ
"TZOD"XBJUGPS4XJGU
"TZOD"XBJUGPS4XJGU ඇಉظॲཧΛͭͳ͛ཧ߹ ͷίʔϧόοΫࠈ
"TZOD"XBJUGPS4XJGU
"TZOD"XBJUGPS4XJGU ΤϥʔϋϯυϦϯ άͰͷίʔϧόο Ϋࠈ
"TZOD"XBJUGPS4XJGU
"TZOD"XBJUGPS4XJGU ͖݅Ͱඇಉظॲཧ Λ࣮ࢪ͍ͨ͠߹ɺେ ͷ߹ɺίʔυʹ ΫϩʔδϟΛॻ͘͜ͱ ʹͳΔ
"TZOD"XBJUGPS4XJGU
"TZOD"XBJUGPS4XJGU ޙͷॲཧͰHVBSEͳͲͰ ฦΔͷߟྀΛΕͯ͠ ·͏ ͦͦσόοά͠ਏ͍
"TZOD"XBJUGPS4XJGU
"TZOD"XBJUGPS4XJGU ʢϥτφʔࢯͷܦݧଇͱલஔ͖ͭͭ͠ʜʣ ඇಉظ"1*Λ࡞ͬͯɺଟ͘ͷ߹6*ͷߋ৽ͳͲ ͕བྷΉͨΊɺಉظಈ࡞Ͱߦ͏͜ͱ͕ଟ͍
"TZOD"XBJUGPS4XJGU
"TZOD"XBJUGPS4XJGU ࠶։ՄೳͳॲཧΛඳ͖͍ͨ࣌ɺ4XJGUͷ߹ͩͱɺ ஈ֊తʹΛੜ͢ΔͷΛͱͯ͠ఆٛ͢Δඞཁ͕ ͋Δ
"TZOD"XBJU
wඇಉظॲཧͷߏจ w1SPNJTFΛ؆ܿʹهड़Ͱ͖ΔΑ͏ʹͨ͠ w༷ʑͳݴޠʹΤοηϯε͕औΓࠐ·Ε͍ͯ Δʢ+BWB4DSJQUɺ$ɺ1ZUIPOɺ3VTUʜʣ "TZOD"XBJU
ଞͷݴޠͷඇಉظॲཧ
wඇಉظॲཧͷ࠷ऴతͳࣦྃ͘͠ഊΛ ද͢ΦϒδΣΫτ w݁ՌΛUIFOϝιουͳͲͰνΣΠϯͤ͞Δ 1SPNJTF
1SPNJTF doSomething().then(function(result) { return doSomethingElse(result); }) .then(function(newResult) { return doThirdThing(newResult);
}) .then(function(finalResult) { console.log('Got the final result: ' + finalResult); }) .catch(failureCallback);
wऴ͍ྃͯ͠Δ͔Ͳ͏͔Θ͔Βͳ͍ॲཧ݁Ռ ΛநԽͨ͠ܕ w'VUVSFະདྷͷ݁ՌΛද͢ܕ wจࣈ௨Γɺ૬खʢॲཧ͢Δଆʣʹʮະདྷʯ Λୗ͢ 'VUVSF
'VUVSF val f: Future[List[String]] = Future { session.getRecentPosts } f
onFailure { case t => println("Τϥʔ͕ൃੜͨ͠: " + t.getMessage) } f onSuccess { case posts => for (post <- posts) println(post) }
wඇಉظͰฦ͞ΕΔΛड͚ΔͨΊͷߏจ "XBJU function resolveAfter2Seconds(x) { return new Promise(resolve => {
setTimeout(() => { resolve(x); }, 2000); }); } async function f1() { var x = await resolveAfter2Seconds(10); console.log(x); // 10 } f1();
wඇಉظͰΛฦ͢͜ͱΛ໌ࣔ͢Δߏจ "TZOD GVODUJPOSFTPMWF"GUFS4FDPOET \ SFUVSOOFX1SPNJTF SFTPMWF\ TFU5JNFPVU \ SFTPMWF SFTPMWFE
^ ^ ^ BTZODGVODUJPOBTZOD$BMM \ DPOTPMFMPH DBMMJOH WBSSFTVMUBXBJUSFTPMWF"GUFS4FDPOET DPOTPMFMPH SFTVMU FYQFDUFEPVUQVUSFTPMWFE ^ BTZOD$BMM
"TZOD function resolveAfter2Seconds(x) { return new Promise(resolve => { setTimeout(()
=> { resolve(x); }, 2000); }); } async function add1(x) { const a = await resolveAfter2Seconds(20); const b = await resolveAfter2Seconds(30); return x + a + b; } add1(10).then(v => { console.log(v); // 4ඵޙʹ60Λදࣔ͠·͢ɻ });
4XJGUͰ ࣮ݱ͠Α͏ͱ͢Δͱ
"TZOD"XBJUGPS4XJGU "TZODͷߏจʹ͍ͭͯ
"TZOD"XBJUGPS4XJGU "XBJUͷߏจʹ͍ͭͯ
"TZOD"XBJUGPS4XJGU #FGPSF
"TZOD"XBJUGPS4XJGU "GUFS
✌ Т✌ ࡾ✌ Т ✌ࡾ ✌Т ✌
"TZOD"XBJUGPS4XJGU 'VUVSF
"TZOD"XBJUGPS4XJGU 'VUVSF
͍͔ͭΒ͑Δʁ
"TZOD"XBJUGPS4XJGU
None
IUUQTRJJUBDPNLPIFSJUFNTCFBFD
None
$PODVSSFODZJO 4XJGU0OFBQQSPBDI
$PODVSSFODZJO4XJGU0OFBQQSPBDI
IUUQTXXXTMJEFTIBSFOFUZVHPMGQSFQBSJOHGPSEJTUSJCVUFETZTUFNGBJMVSFT VTJOHBLLBTDBMBNBUTVSJ
None
"QQFOEJY
w "TZOD"XBJUGPS4XJGU w $PODVSSFODZJO4XJGU0OFBQQSPBDI w 1SPQPTBMʹࡌ͍ͬͯͳ͍4XJGUͷBTZODBXBJU͕ૉΒ͠ ͍ͱࢥ͏ཧతഎܠ w "LLBJO"DUJPOXPSLTIPQ4DBMB.BUTVSJ w
1SFQBSJOHGPSEJTUSJCVUFETZTUFNGBJMVSFTVTJOHBLLB 4DBMB.BUTVSJ ࢀߟจݙ
None