Slide 1

Slide 1 text

Promise׬શ߈ུ ळͷJavaScriptࡇɹin mixi ʙळͷJavaScriptऩ֭ࡇʙ 2016/10/15 ஛಺ɹ༎հ

Slide 2

Slide 2 text

ࣗݾ঺հ ஛಺ɹ༎հ ϓϩάϥϚʔͰ͢ ීஈ͸javascriptɺ java࢖ͬͯ·͢

Slide 3

Slide 3 text

ΞδΣϯμ ϓϩϩʔά Promiseͱඇಉظॲཧͷઆ໌ Promiseͷجຊతͳ࢖͍ํ Promiseͷಋೖํ๏ ·ͱΊ

Slide 4

Slide 4 text

Promiseͱ͍͑͹ ܅ͨͪ΍ͬͺΓ ϓϩϛεͩ Ͱ͕͢

Slide 5

Slide 5 text

jsͰͷPromiseͱ͸ ඇಉظॲཧΛ εϚʔτʹॻ͘࢓૊Έ

Slide 6

Slide 6 text

ͨͩɺॳ৺ऀʹͱͬͯ͸ ϋʔυϧ͕ߴͦ͏ͳͷ΋ࣄ࣮

Slide 7

Slide 7 text

େৎ෉ɺ͜ͷػձʹ ׬શ߈ུͪ͠Ό͍·͠ΐ͏

Slide 8

Slide 8 text

ΞδΣϯμ ϓϩϩʔά Promiseͱඇಉظॲཧͷઆ໌ Promiseͷجຊతͳ࢖͍ํ Promiseͷಋೖํ๏ ·ͱΊ

Slide 9

Slide 9 text

Promiseͱ͸ ඇಉظॲཧΛεϚʔτʹॻͨ͘Ίͷ࢓૊ΈͰ͢ ίʔϧόοΫ஍ࠈΛղফͰ͖·͢ ඇಉظ͕ΒΈͷΤϥʔϋϯυϦϯάΛεϚʔτ ʹ͔͚·͢

Slide 10

Slide 10 text

ඇಉظॲཧͱ͸ processA processB αʔόϦΫΤετͳͲ ͕͔͔࣌ؒΔॲཧ

Slide 11

Slide 11 text

ඇಉظॲཧͱ͸ processA processB αʔόϦΫΤετͳͲ ͕͔͔࣌ؒΔॲཧ processA(); processB();

Slide 12

Slide 12 text

ඇಉظॲཧͱ͸ processA processB αʔόϦΫΤετͳͲ ͕͔͔࣌ؒΔॲཧ processA(); processB(); ͜͏͸ॻ͚ͳ͍

Slide 13

Slide 13 text

ඇಉظॲཧͱ͸ processA(function() { processB(); }); ࣮ࡍʹ͸͜͏ॻ͘ processA͕ऴΘͬͨ͋ͱʹ࣮ߦ͢Δؔ਺Λ౉͢ ˢ͜͏͍͏ͷΛίʔϧόοΫؔ਺ͱ͍͏

Slide 14

Slide 14 text

ΞδΣϯμ ϓϩϩʔά Promiseͱඇಉظॲཧͷઆ໌ Promiseͷجຊతͳ࢖͍ํ Promiseͷಋೖํ๏ ·ͱΊ

Slide 15

Slide 15 text

ྫ୊ processA Լਤͷॱ൪ͰɺඇಉظॲཧΛߦ͏ͱ͢Δ ͜ΕΛίʔϧόοΫɺPromiseͰॻ͘ processB processC processD

Slide 16

Slide 16 text

ίʔϧόοΫͰॻ͍ͨ৔߹ processA(function() { processB(function() { processC(function() { processD(); }); }); }); ؔ਺ΛݺͿͨͼʹωετ͕ਂ͘ͳΔ ͜ΕͰ෼ذ΍ྫ֎ॲཧ͕ೖΔͱࢮʹͦ͏ ͜͏͍͏ͷΛίʔϧόοΫ஍ࠈͱ͍͏

Slide 17

Slide 17 text

PromiseͰॻ͍ͨ৔߹ processA() .then(function() { return processB(); }).then(function() { return processC(); }).then(function() { return processD(); }); ωετ͸1ஈ֊ਂ͘ͳΔ͕ɺͦΕҎ্͸ਂ͘ͳΒͳ͍ ίʔϧόοΫ஍ࠈΛ͋Δఔ౓ࠀ෰Ͱ͖͍ͯΔ

Slide 18

Slide 18 text

ൺֱͯ͠Έ·͠ΐ͏ processA(function() { processB(function() { processC(function() { processD(); }); }); }); processA() .then(function() { return processB(); }).then(function() { return processC(); }).then(function() { return processD(); }); Promiseͷํ͕෼͔Γ΍͍͢

Slide 19

Slide 19 text

Ξϩʔؔ਺Λ࢖͏ͱ ΋ͬͱεϚʔτʹͳΔ processA() .then(() => processB()) .then(() => processC()) .then(() => processD());

Slide 20

Slide 20 text

ɹྫ֎ॲཧ΋εϚʔτʹॻ͚Δ processA() .then(() => processB()) .then(() => processC()) .then(() => processD()) .catch(() => { //ྫ֎ॲཧ }) Ͳͷؔ਺Ͱྫ֎͕ग़ͯ΋ɺcatchʹඈΜͰऴྃ͢Δ try-catchΈ͍ͨͳ࢖͍ํ͕Ͱ͖Δ

Slide 21

Slide 21 text

ΞδΣϯμ ϓϩϩʔά Promiseͱඇಉظॲཧͷઆ໌ Promiseͷجຊతͳ࢖͍ํ Promiseͷಋೖํ๏ ·ͱΊ

Slide 22

Slide 22 text

Promiseͷಋೖํ๏ ຆͲͷϒϥ΢βͰඪ४૷උͯ͠Δ ϥΠϒϥϦΛΠϯετʔϧ͢Δඞཁ͸ͳ͠ ؔ਺͕PromiseΦϒδΣΫτΛฦ͢Α͏ʹ͢Δ fetch apiͳͲൺֱత৽͍͠΋ͷ͸PromiseΛฦ͢ طଘͷίʔϧόοΫؔ਺ܥͷ΋ͷΛPromiseԽ͢Δ
 ํ๏͸ޙड़

Slide 23

Slide 23 text

http:/ /caniuse.com/#search=Promise PromiseͷରԠঢ়گ

Slide 24

Slide 24 text

IEҎ֎͸…… ·͞ʹ ͱ͍͏ঢ়ଶ ͜ΜͳͷͲ͜ʹͰ΋ ͍ΔͩΖ͏

Slide 25

Slide 25 text

Ͳ͜ʹͰ΋͍Δ ܅ͨͪ΍ͬͺΓPromiseͩ ૉ੖Β͍͠ʂʂ

Slide 26

Slide 26 text

طଘؔ਺ΛPromiseԽ // ݩͷؔ਺ function processA(cb) { // ͕͔͔࣌ؒΔॲཧ cb(); } // PromiseԽ function processAWithPromise() { return Promise((resolve, reject) => { processA(resolve); })); }

Slide 27

Slide 27 text

طଘؔ਺ΛPromiseԽ // PromiseԽ function processAWithPromise() { return Promise((resolve, reject => { processA(resolve); })); } શମΛPromiseͰׅΔ ݩͷؔ਺ͷίʔϧόοΫʹresolveΛ౉͢

Slide 28

Slide 28 text

༨ஊ

Slide 29

Slide 29 text

কདྷతʹඇಉظॲཧ͸ ΋ͬͱָʹͳΓ·͢ async function main() { await processA(); await processB(); await processC(); await processD(); } ͍ΘΏΔasyncɺawait

Slide 30

Slide 30 text

ͨͩ͠asyncɺawaitΛ࢖͏ʹ͸ ؔ਺͕PromiseΛฦ͢͜ͱ͕৚݅Ͱ͢ ܅ͨͪ΍ͬͺΓ ϓϩϛεͩ

Slide 31

Slide 31 text

ΞδΣϯμ ϓϩϩʔά Promiseͱඇಉظॲཧͷઆ໌ Promiseͷجຊతͳ࢖͍ํ Promiseͷಋೖํ๏ ·ͱΊ

Slide 32

Slide 32 text

·ͱΊ PromiseͰඇಉظॲཧΛεϚʔτʹॻ͚Δ Promise͸ຆͲͷϒϥ΢βͰඪ४૷උ asyncɺawaitΛ࢖͏ҝʹ΋PromiseԽ͕ඞཁ

Slide 33

Slide 33 text

͝੩ௌ͋Γ͕ͱ͏ ͍͟͝·ͨ͠