
æè¿ãç§ã®å人ãååãã³ãã¥ããã£ã®äººã
ã®å€ããéåææ©èœã®äœ¿çšãç¹ã«ãããžã§ã¯ãã§ã®éåæ/åŸ
æ©ã®äœ¿çšã«ã€ããŠè©±ããŠããã ç§ã¯ãããã©ããªåç©ãªã®ãããããŠãããæŠéãããžã§ã¯ãã®éçºã«äœ¿çšãããã¹ããã©ãããèªåã§æ±ºããããšã«ããŸããã
ç§ãæåã«ææãããã®ã¯ãéåæ/åŸ
æ©ãES7ã®æ©èœã§ãããšããäžè¬çãªèª€è§£ã§ããç§ã®æèŠã§ã¯ãES6ããã³ES7ãšããçšèªã®äœ¿çšèªäœã¯ããŸãçå®ã§ã¯ãªããéçºè
ãæ··ä¹±ãããå¯èœæ§ããããŸãã ES6ãšåŒã°ããES2015ä»æ§ãæ£åžžã«ãªãªãŒã¹ãããåŸãå€ãã®äººã
ã¯ããã¹ãŠãããã«å
¥ããã
ããã«ãéããŠå°å°ããããšãã誀ã£ãæèŠãæ±ããŸããããããã¯ES7ã®æ©èœã§ãã ããã§ã¯ãããŸããã ES2016ä»æ§ã®ãªãªãŒã¹ã§è¡šç€ºãããå
容ã®
ãªã¹ãã次ã«ç€ºããŸãã ã芧ã®ãšããããµã€ãºã¯ããã»ã©å€§ãããªããasync / awaitã¯ãŸã£ãã衚瀺ãããŸããã
æ£ãã話ããŠã»ããã ãããŠããã®æ©èœãŸãã¯ãã®æ©èœã«ã€ããŠèšãã°ã圌ãã¯
ãæ¶ç©ºã®ES6ãES7 ... ESNã§ã¯ãªãããããèšè¿°ããå®è£
ãããŠãããã¬ãŒã ã¯ãŒã¯ã®ç¹å®ã®ä»æ§ãåç
§ããŸããã
å
ã«é²ã¿ãŸãã ããã§ã¯ãåçŽãªèšèã§éåæ/åŸ
æ©ãšã¯äœã§ããïŒ
å
¬çšèªã§è©±ã
async / awaitã¯Promiseã§ãã
é¢æ°ãéåæãšããŠå®£èšãããšããããžãã¯ã¯ãŒã
asyncã䜿çšããŠãé¢æ°ãPromiseãè¿ããšèšããŸãã ããžãã¯ã¯ãŒã
awaitã䜿çšããŠãã®é¢æ°å
ã§æåŸ
ãããã®ã¯ãã¹ãŠãPromiseãè¿ããŸãã
ããã¯ããã®ãããªé¢æ°ãã©ã®ããã«æ©èœãããããã䜿çšãããšãã«äœãæåŸ
ããããç解ããããã®éåžžã«éèŠãªãã€ã³ãã§ãããŠãã³ãŒã³ãã©ã®ããã«èŠãããããããŠã©ã®ããã«æ©èœããããèŠãŠã¿ãŸãããã
ãã£ãããããçµäºããéåæ
Reduxã¢ã¯ã·ã§ã³ã®ç°¡åãªäŸã次ã«ç€ºããŸãã
export function logout(router) { return async (dispatch) => { try { const {data: {success, message}} = await axios.get('/logout'); (success) ? dispatch({ type: LOGOUT_SUCCESS }) : dispatch({ type: LOGOUT_FAILURE, message }); } catch (e) { dispatch({ type: LOGOUT_FAILURE, e.data.message }); } }; }
ä»ãäžè¬ããç¹å®ãž
ããã€ãã®èšäºãèªãã§èªåã§éãã åŸãç§ã¯ç°¡åãªçãããªãŒããäœæããå°ããªäŸãæããŠäž»èŠãªè³ªåã«çããŸããã
å§ããã«ã¯äœãããå¿
èŠããããŸããïŒ
ãã«ãã·ã¹ãã ã䜿çšããªãå Žåã¯ãåã«babelãšbabel-runtimeãã€ã³ã¹ããŒã«ããŠãã ããã
babel test.js -o test-compile.js âoptional runtime âexperimental
ãã以å€ã®å Žåã¯ããã«ãã·ã¹ãã ãšbabelããŒãžã§ã³ã«åºã¥ããŠèšå®ã確èªããããšããå§ãããŸãã babel5ãšbabel6ã®èšå®ã¯éåžžã«ç°ãªããããããã¯éåžžã«éèŠã§ãã
éåæé¢æ°ã¯ã©ã®ããã«äœæãããŸããïŒ
async function unicorn() { let rainbow = await getRainbow(); return rainbow.data.colors }
éåæé¢æ°ã®äœæã¯ã2ã€ã®äž»èŠãªéšåã§æ§æãããŠããŸãã
1.é¢æ°ã宣èšããåã«asyncãšããåèªã䜿çšããŸãã
logoutïŒïŒã®äŸãããããããã«ãããã¯ç¢å°é¢æ°ã䜿çšãããšãã«ãæ©èœããŸãã ããã¯ãã¯ã©ã¹é¢æ°ãšéçé¢æ°ã§ãæ©èœããŸãã åŸè
ã®å Žåãéåæã¯éçã®åŸã«æžã蟌ãŸããŸãã2.é¢æ°èªäœã®æ¬äœã§ã¯ãawaitãšããåèªã䜿çšããå¿
èŠããããŸãã
åèªawaitã®äœ¿çšã¯ãã¡ã€ã³ã³ãŒããåŸ
æ©ããäœããã®ã¢ã¯ã·ã§ã³ãå®è¡ããããŸã§å¿çãè¿ããªãããšã瀺ããŸãã PromiseãåŠçãã解決ãŸãã¯æåŠãè¿ããŸã§åŸ
æ©ããŸãã ãããã£ãŠãã³ãŒãã¯åæçã«å®è¡ãããããã§ãã* awaitã䜿çšããã«ã¯ãé¢æ°ãéåæã§ãããasyncããŒã¯ãŒãã䜿çšããŠå®£èšãããŠããå¿
èŠããããŸãã ãã以å€ã®å Žåã¯ãæ©èœããŸãããawaitã¯ã©ã®ããã«æ©èœããã©ã®æ©èœãå®è¡ããŸããïŒ
åè¿°ã®ããã«ãawaitã¯PromiseãæåŸ
ããŠããŸãã Promiseãªããžã§ã¯ãã®åäœãšã®é¡äŒŒæ§ãæããšãawaitã¯ãã®.thenïŒïŒã¡ãœãããšãŸã£ããåãæ©èœãå®è¡ãããšèšãããšãã§ããŸãã å¯äžã®å€§ããªéãã¯ãçµæãåãåã£ãŠåŠçããããã«ã³ãŒã«ããã¯é¢æ°ãå¿
èŠãšããªãããšã§ãã ããã«ãããã³ãŒãã¯åæçã«å®è¡ãããããã§ãã
ããŠãããawaitãPromiseã®.thenïŒïŒã«é¡äŒŒããŠããå Žåãã©ãããã°äŸå€ããã£ããããŠåŠçã§ããŸããïŒ
async function unicorn() { try { let rainbow = await getRainbow(); return rainbow.data.colors; } catch(e) { return { message: e.data.message, somaText: ' ' } } }
ã³ãŒãã¯åæã¹ã¿ã€ã«ã§ããããããã®ãããå€ãè¯ãtry / catchã䜿çšããŠãã®ãããªåé¡ã解決ã§ããŸãã
ããã«ãããã«ãçŠç¹ãåœãŠãããšæããŸãã

try / catchã䜿çšããããšãããšã©ãŒããã£ããããŠåŠçããå¯äžã®æ¹æ³ã§ãã äœããã®çç±ã§ããã䜿çšããªãããŸãã¯åã«å¿ããå Žåãããã¯åŠçèœåã®æ¬ åŠãšæ倱ã«ã€ãªããå¯èœæ§ããããŸãã
awaitã«ç¶ãã³ãŒãã¯ã©ã®æç¹ã§å®è¡ãããŸããïŒ
async function unicorn() { let _colors = []; let rainbow = await getRainbow(); if(rainbow.data.colors.length) { _colors = rainbow.colors.map((color) => color.toUpperCase()); } return _colors; }
awaitã«ç¶ãã³ãŒãã¯ãawaitã§äœ¿çšãããé¢æ°ã
resolveãŸãã¯
rejectãè¿ãå Žåã«ã®ã¿å®è¡ãç¶ããŸãã
awaitã§äœ¿çšãããé¢æ°ãPromiseãè¿ããªãå Žåã¯ã©ããªããŸããïŒ
awaitã§äœ¿çšãããé¢æ°ãPromiseãè¿ãããawaitããããæåŸ
ããŠããããšãæ¢ã«ããã£ãŠããå ŽåãawaitããŸã£ãã䜿çšããŠããªããã®ããã«ã³ãŒãã®å®è¡ãç¶è¡ãããŸãã
é¢æ°ãéåæã§å®£èšããawaitã䜿çšããªãå Žåã¯ã©ããªããŸããïŒ
async function unicorn() { let rainbow = getRainbow(); return rainbow; }
ãã®å Žåãåºåã¯Promiseé¢æ°getRainbowïŒïŒãžã®åãªããªã³ã¯ã«ãªããŸãã
awaitãé£ç¶ããŠäœ¿çšããŠè€æ°ã®é¢æ°ãäœæãããšã©ããªããŸããïŒ
async function unicorn() { let rainbow = await getRainbow(); let food = await getFood(); return {rainbow, food} }
ãã®ãããªã³ãŒãã¯é çªã«å®è¡ãããŸãã æåã«getRainbowïŒïŒãæ©èœããresolveãŸãã¯rejectãè¿ããšgetFoodïŒïŒãæ©èœãå§ããŸãã 1ã€ã®èª²é¡ã1ã€ã®çµæã
ãããŠãè€æ°ã®åŒã³åºãããåæã«çµæãååŸããå¿
èŠãããå Žåã¯ã©ããªããŸããïŒ
async function unicorn() { let [rainbow, food] = await Promise.all([getRainbow(), getFood()]); return {rainbow, food} }
Promiseãæ±ã£ãŠããããšããã§ã«ããã£ãŠããã®ã§ã ãããã£ãŠãã¡ãœããã䜿çšã§ããŸãã ãã®çš®ã®åé¡ã解決ããããã®Promiseãªããžã§ã¯ãã®
ãã¹ãŠïŒïŒ ã
ããã«ãawait * arrayOfPromisesã³ã³ã¹ãã©ã¯ãã¯ãã¯ãé¢é£æ§ããªããä»æ§ããåé€ãããŠããããšã«æ³šæããŠãã ããã 䜿çšããããšãããšãPromise.allïŒïŒã䜿çšããæ¹ããããšããã¡ãã»ãŒãžã衚瀺ãããŸãã
ã¡ãã»ãŒãžã®äŸïŒ
await* has been removed from the async functions proposal. Use Promise.all()
await *èšèšæ
å ±ãæŽæ°ããŸããã xGromMxãšdegorovã«æè¬ããŸããä»äºãæåãããããã«ä»ã«ç¥ã£ãŠããã¹ãããšã¯ãããŸããïŒ
async function getAllUnicorns(names) { return await Promise.all(names.map(async function(name) { var unicorn = await getUnicorn(name); return unicorn; })); }
ãããžã§ã¯ãã§async / awaitã®äœ¿çšãéå§ããå Žåãã¹ã¿ãã¯ã®ã»ãšãã©ãã¹ãŠãéåæã§ãªããã°ãªããªããšããäºå®ã«åããå¿
èŠãããããšãèŠããŠããå¿
èŠããããŸãã ãããŠãããã¯ããªãã®åé¡ãšäžäŸ¿ãè¿œå ããŸãã
ãã¹ãŠã®ããã§ããç解ã§ããªããã®ãæ®ã£ãŠããå ŽåããŸãã¯è£è¶³ãããã®ãããå Žåãäž»èŠãªçè«çåŽé¢ãææ¡ããŸãããã³ã¡ã³ãããåŸ
ã¡ããŠããŸãã
ãããŠç§ã«ãšã£ãŠã¯ããã¹ãŠã®æ
å ±ãåéããéåæãŠãã³ãŒã³ã§äœããã¹ããã決å®ããæã§ãã ãªãªãŒã¹æ
è¡ã«é£ããŠè¡ãããããããããžã§ã¯ãã®ããã«å®¶ãåºãã
çµè«ïŒ
äžèŠãéåææ©èœã¯ããžãã£ããªææ
ãåŒãèµ·ãããŸãã ããªãã®ã³ãŒããåæçã«äŒŒããã®ã«ããããç°¡æœã§èªã¿ãããããããã®ãããª
ããããå°ããªãã® ã
ããããããã¯äžèŠãããšããã§ãã
ã¯ããã³ãŒãã¯ç°¡æœã§èªã¿ãããã§ãã ã¯ãããããã«èŠããŸãã ããããéåžžã®APIãè€éãªçžäºæ¥ç¶ã¹ã¯ãªãããããè€éãªãã®ïŒããŒã¿ããŒã¹ãæäœããããã®ã¿ã¹ã¯ãã¥ãŒãªã©ïŒãäœæããããšãããšãããã«éåæã¹ã¿ãã¯ã®åé¡ãçºçããŸãã
ã»ãšãã©ãã¹ãŠã®ç°å¢ã«åªãããã©ãŠã¶ã¯ããã®ãŸãŸã§ES2015ã®æ©èœããµããŒãããŠããŸãïŒ93ïŒ
-98ïŒ
ïŒïŒ
è¡š ïŒã ç§ã«ãšã£ãŠãããã¯ãèŠä»¶ãšã¹ã¿ãã¯ã«åºã¥ããŠæ°ãããããžã§ã¯ããéå§ããããšãæå³ããŸãããããžã§ã¯ãã§ã®babelã®å¿
èŠæ§ã«ã€ããŠã¯ãã§ã«èããŠããŸãã
ããããasync / awaitã䜿çšããããšã«ããå Žåãbabelã䜿çšããå¿
èŠããããŸãã ãããŠãããã
ç§ã®ã³ãŒãã«çŸãããå ãããšã¯èšããŸããã çµå±ã®ãšãããå
¬åŒã«ã¯éåæ/åŸ
æ©ã¯ãªããããããŸã£ããè¡ããããã©ããã¯äžæã§ãã ãããŠãããã¯ç§ã«ãšã£ãŠå€§ããªãã€ãã¹ã§ãã
ãŸããèªåçã«ãšã©ãŒã«ã¯ã©ãã·ã¥ããã®ã§ã¯ãªããawaitã䜿çšããã®ãå¿ããå Žåããé©åãªã³ããŒã¢ã³ãããŒã¹ãã䜿çšããªãã£ãå ŽåãPromiseãžã®ãªã³ã¯ããåŸãããªããšããäºå®ãå«ãã§ãã ããã¯ãç¹ã«è€æ°ã®éçºè
ããã倧èŠæš¡ãªãããžã§ã¯ãã®å Žåãçµæã䌎ãå¯èœæ§ããããŸãã
ãããŠæåŸã®1ã€ã
async / awaitã䜿çšããã»ãšãã©ã®ã¿ã¹ã¯ã¯ã
ãžã§ãã¬ãŒã¿ãŒã䜿çšããŠå®å
šã«è§£æ±ºãããŸãã
ãŸããããè¯ããµããŒãããããŸãã
第äºã«ãçºé»æ©ã®åäœãããèªç¶ã§äºæž¬å¯èœã«ãªããŸãã
第äžã«ãbabelèªäœãããã®ãããªã³ãŒããç¹å¥ãªèšå®
example1 ã
example2ã®ãžã§ãã¬ãŒã¿ãŒã«å°ããŸãã
NodeJSã§ã®ãµããŒã
éåæ/åŸ
æ©ã¯ãã§ã«å®éšçã«V8ã«ãããããŠããŸãã ã€ãŸããããŒãžã§ã³nodejs 7ããã¯ããã®ãŸãŸäœ¿çšããŠããã«æäœã§ããŸãã
æ¹æ³ïŒ
NVM_NODEJS_ORG_MIRROR=https:
åèš
æåã«å°ãã質åã«çããŸãã
éåæé¢æ°ã䜿çšããå Žåãäž»ã«APIãèšè¿°ããããã«ãPetãããžã§ã¯ãã§ã®ã¿äœ¿çšããéåžžã«å€§ããªã¯ãŒã«ãŒã§ã¯äœ¿çšããŸããã å°ãªããšããã¹ãŠãæšæºåãããå®éšçã«ãã©ã°ã®äžã«çœ®ããããŸã§ã¯ã
ããšãã°ãReduxã®ã¢ã¯ã·ã§ã³ã²ãŒã ã§ãããã䜿çšããã®ã奜ãã§ããã ãã¹ãŠãçŸãã調åããŠããŸããç§ã¯ãèå³ã®ãã質åã«å¯ŸåŠããããã«ããã®è³æãäž»ã«èªåçšã«æžããŸããã ãã®è³æããŸã 誰ãã«åœ¹ç«ã€ãªããç§ã¯ãšãŠã幞ãã§ãã
ãŸãã次ã®èšäºã§ã¯ãéåæïŒã³ãŒã«ããã¯ãçŽæããžã§ãã¬ãŒã¿ãŒãã¢ãã ïŒã®å®è£
ã«å¯ŸããããŸããŸãªã¢ãããŒãã詳现ã«æ¯èŒããããšæããŸãã ãããæç¥ã ãã§ãªããjavascriptã§å§ããã°ããã®äººã
ã«ãæããã«ããã
ãæž
èŽããããšãããããŸããã é 匵ã£ãŠ