# ã2024幎6æãJavaScript Primer æ©æèŒªèªäŒð tags: `JSPrimerð ` - [é嬿ŠèŠ](https://bootcamp.fjord.jp/regular_events/53) â»FBCå ããŒãž - [HackMDãŸãšã](https://hackmd.io/NYIcQqMUSSqfEFd9rUG7fg) - [JavaScript Primer Webçããã](https://jsprimer.net/) <hr/> ## ð 2024-6-1(å) ### ð§ð»âð» ãã¡ã·ãª/ãã©ã€ã㌠- ãã¡ã·ãª: karlley - ãã©ã€ããŒ: yumiya ### ð èªãã ãšãã - from - https://jsprimer.net/basic/function-this/#arrow-function-this - to - https://jsprimer.net/basic/class/#class-declaration ### 次å - https://jsprimer.net/basic/class/#class-instance ### ð åŠãã ããšã»ææ³ã»éè« - @karlley - thisã ãºã... ãšããããããã ãèŠãã - arrow function: äžçªè¿ãå€åŽã®thisãthisã¯åºå®(éçã«æ±ºãŸã) - function: ããŒã¹ãªããžã§ã¯ããthisãthisã¯åŒã³åºãæ¹ã§å€ãã(åç) - ã¡ãœããã®çç¥èšæ³: `const obj = { fn(){åŠç} }` - ã¯ã©ã¹ã¯ãªããžã§ã¯ãã®äžçš®(ç¹å¥ãªãã®ã§ã¯ãªãã€ã¡ãŒãžïŒ) - use strictã䜿ããšãããã¬ãã«ã®ãªããžã§ã¯ããåç §ã§ããªãã®ã¯ãªãïŒ - äœ¿ãæ¹ãééãããªãããã«ããŠãã仿§ - thisãšããŠåç §ãã䜿ãéããªã - ã»ãã¥ãªãã£é¢ããã - haruguchi - thisé£ãããªãã - 1. ã¢ããŒé¢æ°ä»¥å€ã®å Žå - fn() ã ãšããŒã¹ãªããžã§ã¯ããªããããããã¬ãã«ã®thisãåç § - xxx.fn() ã ãšããŒã¹ãªããžã§ã¯ãããããããŒã¹ãªããžã§ã¯ã(xxx)ãthis - ã€ãŸãåŒã³åºãæ¹ã«ãã£ãŠthisãæ±ºãŸã(åçã«thisãæ±ºãŸã) - 2. ã¢ããŒé¢æ°ã®å Žå - 颿°èªäœã¯thisãæããªãã®ã§ã¢ããŒé¢æ°ãå®çŸ©ããå€åŽã®ã¹ã³ãŒããžãšthisãåç §ããŠãã - ã€ãŸãå®çŸ©ããã¹ã³ãŒãã«ãã(éçã«thisãæ±ºãŸã) - ããã ãçè§£ããã9å²ã¯å€§äžå€«ãå ¥ãåã«ãªããšããããããã©ãã - ããšmapã¿ããã«çšæãããŠãã颿°ã¯thisããããããªããªãã芪åã ãšããã¥ã¡ã³ãã«æžããŠãã£ãããããæžããŠãªãã£ããèªåã§ãœãŒã¹ã³ãŒãèŠãªããšãããªããããåºæ¬çã«æèããªãã§è¯ããããªäœãã«ããŠãããŠããã¯ããããã¯ãã - yumiya - 埩ç¿ãã§ããŠããªãã£ãã®ã§ãä»åã®ç« ã®å 容ã¯ãªããªãçè§£ã§ããªãã£ãð - `use strict`ã®æç¡ã§`this`ã®å®çŸ©ãå€ããå Žåããã - > strict modeã§ã¯ãªãç¶æ³ã§thisãundefinedã®å Žåã¯ãthisãã°ããŒãã«ãªããžã§ã¯ããåç §ããããã«å€æãããåé¡ãããããã§ãã - ã¢ããŒé¢æ°èªèº«ã¯`this`ãæããªãïŒåç §ïŒ[å¯ŸåŠæ³: Arrow Functionã§ã³ãŒã«ããã¯é¢æ°ãæ±ã](https://jsprimer.net/basic/function-this/#arrow-function-callback)ïŒ - ãã£ãŠãèªèº«ã®å€åŽã®ã¹ã³ãŒãã«å®çŸ©ããããã£ãšãè¿ã颿°ã®thisã®å€ããåã - ã¢ããŒé¢æ°ã§ã³ãŒã«ããã¯é¢æ°ãå®çŸ©ãããšã`this`ãäžæå€æ°ã«ä»£å ¥ããªããŠãããªã - ã¡ãœããã®çç¥èšæ³ïŒåç §ïŒ[ã¡ãœããã®çš®é¡](https://jsprimer.net/basic/function-this/#type-of-method)ïŒ - const obj = { fn(){åŠç} } <hr/> ## ð 2024-6-2(æ¥) ### ð§ð»âð» ãã¡ã·ãª/ãã©ã€ã㌠- ãã¡ã·ãª: @sugiwe - ãã©ã€ããŒ: @yumiya ### ð èªãã ãšãã - from - https://jsprimer.net/basic/class/#class-instance - to - https://jsprimer.net/basic/class/#public-class-fields ### 次å - https://jsprimer.net/basic/class/#declare-class-fields ### ð åŠãã ããšã»ææ³ã»éè« - @sugiwe - JSã®ã¯ã©ã¹ã§ã¯ãã€ã³ã¹ã¿ã³ã¹ã®åæååŠçã`constructor`ã¡ãœããïŒã³ã³ã¹ãã©ã¯ã¿é¢æ°ïŒã§è¡ã - ã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹ãäœæããã«ã¯`new`æŒç®åã䜿ã - newæŒç®åã®åŒæ°ã¯ãã¯ã©ã¹å ã®`constructor`ã¡ãœããïŒã³ã³ã¹ãã©ã¯ã¿é¢æ°ïŒã®ä»®åŒæ°ã«æž¡ããã - ã³ã³ã¹ãã©ã¯ã¿ã®äžã§ã¯ã€ã³ã¹ã¿ã³ã¹ãªããžã§ã¯ãïŒthisïŒã®åæååŠçãè¡ã - ã¯ã©ã¹ã¯éåžžã®é¢æ°ãšããŠã¯åŒã¹ãªã - ã³ã³ã¹ãã©ã¯ã¿é¢æ°å ã§returnã䜿ã£ãŠä»»æã®ãªããžã§ã¯ããè¿ãããšã¯å¯èœã ãã©ãæ··ä¹±ã®å ãªã®ã§äœ¿ããªãæ¹ãè¯ãããããå®éã¡ãã£ãšããããããªãã£ã⊠- ã¯ã©ã¹ã®ãããã¿ã€ãã¡ãœããå®çŸ©ã§ã¯`:`åºåãã§ã¡ãœãããå®çŸ©ã§ããªãã`ã¡ãœãã() { ã¡ãœããã®äžèº« }`ãšããæãã§å®çŸ©ããããã«ãã - `getter`ãš`setter`ã®ãµãããããã€ã¡ãŒãž - `getter`ã¯ã²ãããªã®ã§ååŸããŠãã圹å²ããªã®ã§returnã§è¿ãå¿ èŠããã - `setter`ã¯ã»ãããªã®ã§å€ãå ¥ãã圹å²ããªã®ã§ã`=`ã§ä»£å ¥ããããreturnã§å€ãè¿ãå¿ èŠã¯ãªã - @yumiya - ã€ã³ã¹ã¿ã³ã¹ã®åŠçååŠçã¯ã³ã³ã¹ãã©ã¯ã¿é¢æ°ã䜿ã - ã¯ã©ã¹ã®ã³ã³ã¹ãã©ã¯ã¿ã¯ã€ã³ã¹ã¿ã³ã¹ïŒthisïŒãåæåãããã - ã³ã³ã¹ãã©ã¯ã¿é¢æ°ã§ã¯`return`ã䜿ããªãããã«ãã - `return`ã¯äœ¿ãããšã¯ã§ãããããªããžã§ã¯ããè¿ããããã - ã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹åã®åŠçã¯`this`ãããããšãé€ãã°Rubyã«è¿ãã€ã¡ãŒãžã ãšæãã - `constructor` -> `initialize` - ã¢ã¯ã»ããµããããã£ã®å®çŸ©ã䌌ãŠãã - `get` -> `attr_reader` - `set` -> `attr_writer` - `attr_accessor`ã«çžåœãããã®ã¯ãªãïŒð€ - `_ããããã£`åã¯ããã©ããŒãã«ãããããããã£ãäžæçã«å€æ°ã«ããã€ã¡ãŒãžïŒ - `constructor`ã¡ãœããã§åŒæ°ã`this._ããããã£å`ãžä»£å ¥ãã ``` constructor(value) { this._value = value; } - `this`ãã¡ãããšçè§£ã§ããŠããªãã®ã§é£ãããã <hr/> ## ð 2024-6-8(å) ### ð§ð»âð» ãã¡ã·ãª/ãã©ã€ã㌠- ãã¡ã·ãª: @sugiwe - ãã©ã€ããŒ: @karlley ### ð èªãã ãšãã - from - https://jsprimer.net/basic/class/#declare-class-fields - to - https://jsprimer.net/basic/class/#static-class-fields ### 次å - https://jsprimer.net/basic/class/#two-instance-method-definition ### ð åŠãã ããšã»ææ³ã»éè« - @sugiwe - arrow functionã®thisã¯ãå®çŸ©æã«1ã€å€ãèŠã«ãããthisãåºå®ããããšããã®ããã€ã³ãã - thisãåºå®ããããšããããšãã¡ãªããã§ããããšããã®ããŸã æç¢ºã«ãã³ãšããªããã©ãããŒã£ãšthisãèŠãŠããŠãããããšãããããâŠïŒããããã®æ°æã¡ã«ã¯ãªã£ãŠãã - Privateã¯ã©ã¹ãã£ãŒã«ãã«ã€ããŠã`_`ã¯äœã®å¶çŽããªãæ £ç¿ãšããŠãããã¯å€ã§äœ¿ããªãããã«ãããããã£ãŠããåãæ±ºãã®ãããªãã®ã ã£ãããES2022ã«è¿œå ããã`#`ã«ãã£ãŠæ©èœãšããŠå€ããåŒã¹ãªãããã«ãªã£ã - éäžã§åšãä¹±å ¥ããŠéäžå7岿žã§ããæ±ïŒ3åãããïŒ - @karlley - æåŸãŸã§ã¯ã©ã¹ãã£ãŒã«ããäœãåãããªãã£ã...ååã®ãèªãŸãã°ð - ã¯ã©ã¹ãã£ãŒã«ãã§ã®thisã¯ãã®ã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹ - ã¢ããŒé¢æ°ã®thisãåºå®ãããã¡ãªããã¯ãã¶ããã£ã¡ã倧ãããã ãšæãã - `_`ã¯privateã ããšäŒããŠããã ã(æ©èœã¯public)ã`#` ã¯æ©èœçã«ãprivate - jsã®ã»ãã¿ãŒãã²ãã¿ãŒã®ååšããå¿ããŠãã... jsãprimerã®äžç€ä»¥éã¯ã»ãšãã©èŠããŠããªãããšãè¯ãåãã£ã - JSã§OOPããæ©äŒå°ãªãã®ã§ããã蟺ã¯äœ¿ãæã«åŸ©ç¿ã§ãè¯ããã(ãã©ã¯ãã£ã¹ã§äœ¿ããããð) - @shodan - ã¯ã©ã¹ãã£ãŒã«ãã¯`=`ã䜿ã£ãä»£å ¥ã§å®çŸ©ãããã®ã§ã¯ãªãã`Object.defineProperty`ã¡ãœããã䜿ã£ãŠããããã£ãå®çŸ©ããã - `Object.defineProperty`ã䜿ã£ãããããã£ã®å®çŸ©ã§ã¯ããã®ã¯ã©ã¹ãã£ãŒã«ãã§å®çŸ©ããããããã£ã®ã»ãã¿ãŒïŒ`set`ã§å®çŸ©ããã»ãã¿ãŒã¡ãœããïŒã¯ç¡èŠããŠããããã£ãå®çŸ©ããã - ãã£ããéãã説æããããããªãã»ã©âŠâŠããšæããããã©ããããã - éçã¯ã©ã¹ãã£ãŒã«ããããšããæ®éã«æžãæããããšãã§ãã ```js class Colors { static GREEN = "ç·"; } console.log(Colors.GREEN); // => "ç·" Colors.GREENã= 'hoge' console.log(Colors.GREEN); // => "hoge" ``` <hr/> - haruguchi - ã¯ã©ã¹ãã£ãŒã«ãDIãããæã¯å®£èšã ããã䜿ãéãªãããïŒ - ã¯ã©ã¹ã§å®çŸã§ããããšããªããžã§ã¯ãã§æžãçŽãã°çè§£ãæ·±ãŸã - ããããã¿ããªå€§å¥œãéåæåŠçããã - 6æããæ¯æ¥1æ¥1äžæ©ãã£ã¬ã³ãžããŠããã§ãããããèŸãããã§ãã - ðª - ðïž - @yumiya - 仿¥ã¯ã©ãžãªåå ã§ããð» - `this`ãããããçè§£ãé£ãããªã£ãŠããã - ã¯ã©ã¹ãã£ãŒã«ãã§ã¯`this`ã¯ã¯ã©ã¹èªèº«ã®ã€ã³ã¹ã¿ã³ã¹ãåç §ãã - ã¢ããŒé¢æ°ã䜿ã£ãŠ`this`ãå€åããªãããã«ãã - ãã©ã€ããŒããªã¯ã©ã¹ãã£ãŒã«ãã¯ããã£ãŒã«ãåã®åã«`#`ãã€ãã - å®çŸ©ïŒ`#`ãã£ãŒã«ãå - åç §ïŒ`this.#`ãã£ãŒã«ãå - Privateã¯ã©ã¹ãã£ãŒã«ãã¯ãã¯ã©ã¹ã«ååšãããã¹ãŠã®Privateã¯ã©ã¹ãã£ãŒã«ããæç€ºããå¿ èŠããã - 倿°åã«ã¢ã³ããŒã¹ã³ã¢ïŒ`_hoge`ãªã©ïŒãã€ããŠã匷å¶åã¯ãªããå€ããåç §ã§ããŠãã - éçã¡ãœããïŒã¯ã©ã¹ã¡ãœããïŒã¯ã¡ãœããåã®åã«`static`ãã€ãã - éçã¡ãœããã®`this`ã¯ã¯ã©ã¹èªèº«ãåç §ãã - ã¯ã©ã¹èªäœã«å®çŸ©ããéçã¯ã©ã¹ãã£ãŒã«ããå©çšã§ãã - ãã£ãŒã«ãåã®åã«`static`ãã€ãã - `#`ãã€ããŠPrivateã«ããããšãã§ãã - åç« ã®ã[颿°ãšthis](https://jsprimer.net/basic/function-this/)ãããããããã¡ãããšåŸ©ç¿ããð ## ð 2024-6-9(æ¥) ### ð§ð»âð» ãã¡ã·ãª/ãã©ã€ã㌠- ãã¡ã·ãª: @sugiwe - ãã©ã€ããŒ: @yumiya ### ð èªãã ãšãã - from - https://jsprimer.net/basic/class/#two-instance-method-definition - to - https://jsprimer.net/basic/class/#prototype-inheritance ### 次å - https://jsprimer.net/basic/class/#static-inheritance ### ð åŠãã ããšã»ææ³ã»éè« - @sugiwe - ãããã¿ã€ãã¡ãœãããšã€ã³ã¹ã¿ã³ã¹ãªããžã§ã¯ãã®ã¡ãœããã¯äžæžããããã«ã©ã¡ããå®çŸ©ãããŠãã - ã€ã³ã¹ã¿ã³ã¹ãªããžã§ã¯ãã®ã¡ãœããããããã¿ã€ããªããžã§ã¯ãã®ã¡ãœãããããåªå ããŠåŒã°ããŠãã - ã€ã³ã¹ã¿ã³ã¹ã¡ãœããã¯arrow颿°`method = () => {`ã§å®çŸ© - ãããã¿ã€ãã¡ãœãã㯠`method() {`ã§å®çŸ© - ãããã¿ã€ããã§ãŒã³ãã¹ã³ãŒããã§ãŒã³ã®ããã«ãå åŽããå€åŽã«æ¢çŽ¢ããŠããã€ã¡ãŒãž - Rubyã®ã¡ãœãããã§ãŒã³ãšããèšèã«åŒã£åŒµãããŠã¡ãã£ãšæ··ä¹±ããŠãã - ç¶æ¿ã¯ `extends` - `super`ã䜿ã£ãŠç¶æ¿ã掻çšïŒããã·ãŒã³ãšã䜿ããã«ç¶æ¿ã掻çšããã·ãŒã³ã®éããããäžå埩ç¿ãããã - thisã䜿ãããå Žåã«`super`ãå¿ èŠïŒ - ãã£ãŒã«ããã¡ãœããã¯`super`äžèŠïŒ - `hard private`ãš`soft private`ããããJSã®`#`ã¯hardã®ã»ãã - @yumiya - é£æåºŠãäžãã£ãŠãããšæããŸãããããããªãããŒã¯ãŒããå€ããããã¹ããšèªã¿é²ããªãããµã³ãã«ã³ãŒããåãããŠã¿ãªããšçè§£ãé²ã¿ãŸããð - ãããã¿ã€ããã§ãŒã³ãšã¯ - ã€ã³ã¹ã¿ã³ã¹ãªããžã§ã¯ããšãããã¿ã€ãã¡ãœããã¯ãã©ã¡ããå®çŸ©ããã - ã€ã³ã¹ã¿ã³ã¹ãªããžã§ã¯ãã®ã¡ãœãããããããã¿ã€ããªããžã§ã¯ãã®ã¡ãœãããããåªå ããŠåŒã°ãã - ãããã¿ã€ãã¡ãœãã â ãããã¿ã€ããªããžã§ã¯ããžå®çŸ©ããã - ã€ã³ã¹ã¿ã³ã¹ãªããžã§ã¯ãã®ã¡ãœãã â ã€ã³ã¹ã¿ã³ã¹ãªããžã§ã¯ãã«å®çŸ©ããã - [ãªããžã§ã¯ã](https://jsprimer.net/basic/object/)ãš[ãããã¿ã€ããªããžã§ã¯ã](https://jsprimer.net/basic/prototype-object/)ã®ç« ã埩ç¿ããïŒ - ç¶æ¿ - Rubyã®æ§æãšäŒŒãŠãããªããšæããŸããð¡ - JavaScriptã¯`extends`ãã§ãRubyã¯`<` - class Child extends Parent{~} - class Child < Parent{~} - `super`ããŒã¯ãŒãã¯åã - privateã¯ã©ã¹ãã£ãŒã«ãã¯`hard private`ã«ãªã£ãŠãã - `soft private`ã¯ãŠãŒã¶ãŒèªèº«ã§å®è£ ããå¿ èŠããããã - Rubyã§ãã`protected`ã¿ãããªãã®ãäœãïŒ <hr/> ## ð 2024-6-15(å) ### ð§ð»âð» ãã¡ã·ãª/ãã©ã€ã㌠- ãã¡ã·ãª: @yumiya - ãã©ã€ããŒ: @sugiwe ### ð èªãã ãšãã - from - https://jsprimer.net/basic/class/#static-inheritance - to - https://jsprimer.net/basic/error-try-catch/#error-and-debug ### 次å - https://jsprimer.net/basic/error-try-catch/#console.error ### ð åŠãã ããšã»ææ³ã»éè« - @sugiwe - éçã¡ãœããã¯ãRubyã§ã®ã¯ã©ã¹ã¡ãœããã®ãããªãã®ãã€ã³ã¹ã¿ã³ã¹ãäœããªããŠãã¡ãœãããåŒã³åºãã - ArrayãStringãªã©ã®ãã«ãã€ã³ãªããžã§ã¯ããç¶æ¿ã§ãã - try...catchãªãã§ãšã©ãŒãçºçãããšããã ãšã©ãŒã¡ãã»ãŒãžãåºãã ãã ãã©ãã¡ãããšcatchããã°ãšã©ãŒå 容ã詳ããèŠããã§ããã - throwã§Errorãªããžã§ã¯ãã®ã€ã³ã¹ã¿ã³ã¹ãæããããšãéèŠããã ãäŸå€ãæããããŸãããã ãã ãšãã¹ã¿ãã¯ãã¬ãŒã¹ãåŸãããªã - SyntaxErrorã¯ãæ§æçã«äžæ£ãã€ãŸãå®è¡åã«ãããããšãããã®ã§ãtry...catchã§ããªããevalã䜿ã£ãäŸãã»ããããšãªã£ã - äŸå€ææãã¬ã⊠- @karlley - éçã¡ãœãã - ã¯ã©ã¹ã¡ãœããçãªãã€ãnewããåŒã¹ã - åŒã³åºãåŽãåºå®ããã -> éç(static) - throwã§Errorãªããžã§ã¯ã以å€ãæãããšãŽãã«ãªãïŒ - SyntaxErrorã¯ããã°ã©ã å®è¡åã«çºçããã®ã§try...catchã§ãã£ããã§ããªã - ã³ã³ãœãŒã«ã§ããèŠã`<anonymous>` ã¯å¿å颿°ãšããæå³ - globalã³ã³ããã¹ãã®ãããã¬ãã«ã®é¢æ° - @haruguchi - 0 is not positive number. 0 is not negative number. - äŸå€åŠçã¯ã¡ãããšããã - `(x => x + 1)();` â å¿å颿° - ç ãããã®ããšå¯ããã©ãããã€ãè¿·ãã - @yumiya - `super.ããããã£å`ã§ã芪ã¯ã©ã¹ã®ãããã¿ã€ãã¡ãœãããåç §ã§ãã - ã¡ãœããåã®åã«`static`ãã€ãããš[éçã¡ãœãã](https://jsprimer.net/basic/class/#static-method)ã«ãªãïŒRubyã§ããã¯ã©ã¹ã¡ãœããïŒ - `Child.method()`ã§åŒã³åºã - haruguchiããããè£è¶³ ```javascript class Foo { static foo() {} bar() {} } âãã¯ã©ã¹å®çŸ©ããæç¹ã§åºå®(éçã«æ±ºãŸã) Foo.foo() foo1 = new Foo() âåçã«æ±ºãŸã foo1.bar() foo2 = new Foo() âåçã«æ±ºãŸã foo2.bar() ``` - catchç¯ã§ãªããžã§ã¯ããåç §ã§ããèå¥åãã[äŸå€èå¥å](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Statements/try...catch#The_exception_identifier)ããšåŒã¶ - äŸïŒcatch(error){~}ã®`error`ãæã - `Error new`ã§`Error`ã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹ - `throw`ã¯`new Error(âhogeâ)`ã®ããã«æžããªããšã¹ã¿ãã¯ãã¬ãŒã¹ã§ããªã - `SyntaxError`ã¯ãå®è¡æã®ãšã©ãŒããã£ãããããã`try...catch`æã§ã¯catchã§ããªã - ã³ãŒããå®è¡ããåã«ããŒã¹ããŠãæ§æãæ£ãããããã§ãã¯ãã - ã¹ã¿ãã¯ãã¬ãŒã¹ã¯ãããã°ã©ã ã®å®è¡éçšãèšé²ããå 容ãã©ã®åŠçã«ãã£ãŠãšã©ãŒãçºçãããããã - ã¹ã¿ãã¯ãã¬ãŒã¹ã§è¡šç€ºãããå 容ã¯ãäžããäžã«åŒã³åºãå ãé¡ã£ãŠãã <hr/> ## ð 2024-6-16(æ¥) ### ð§ð»âð» ãã¡ã·ãª/ãã©ã€ã㌠- ãã¡ã·ãª: @yumiya - ãã©ã€ããŒ: @sugiwe ### ð èªãã ãšãã - from - https://jsprimer.net/basic/error-try-catch/#console.error - to - https://jsprimer.net/basic/async/#promise-instance ### 次å - https://jsprimer.net/basic/async/#promise-then-and-catch ### ð åŠãã ããšã»ææ³ã»éè« - @sugiwe - causeã¯ãããšãåãããšã©ãŒã¡ãã»ãŒãžããããããã远å ã§ãã€ã€ãã¹ã¿ãã¯ãã¬ãŒã¹ã远ãã - JS Primerã®ãµã€ãå ã§å®è¡ã§ããç°å¢ãšããã©ãŠã¶ã®ã³ã³ãœãŒã«ã§å®è¡ããçµæã¯éãããšãããã®ã§æ³šæïŒåæåŠçã®ãšããã§æ··ä¹±ããïŒ - éåæåŠçã®ä»£è¡šçãªé¢æ°`setTimeout(ã³ãŒã«ããã¯é¢æ°, delay);`ã¯æ £ããŠãããã - æ°è¡åŸã«`}, 1000);`ã£ãŠåºãŠããŠãŸã æ··ä¹±ããããã - éåæåŠçãåæåŠçãšåãã¡ã€ã³ã¹ã¬ããã§å®è¡ãããã®ã§ãéåæåŠçã§å®è¡é ãã³ã³ãããŒã«ããããšæã£ãŠããŠãéã«åæåŠçãå ¥ã£ãŠããããšãããã®ã§æ³šæ - éåæåŠçã§try...catchæ§æãæ£ãã䜿ãã«ã¯ãã³ãŒã«ããã¯é¢æ°å ã§åæçãªãšã©ãŒãšããŠãã£ããããå¿ èŠããã - Promiseã¯éåæåŠçã®ç¶æ ãçµæã衚çŸãããã«ãã€ã³ãªããžã§ã¯ãã§ã以äžã®ïŒã€ãããªã£ãŠãã - éåæåŠçãããéšåïŒasyncPromiseTask颿°ïŒ: Promiseã®ã€ã³ã¹ã¿ã³ã¹ãè¿ã - éåæåŠçã®çµæãæ±ãéšå: Promiseã®ã€ã³ã¹ã¿ã³ã¹ãåãåããæåæã®åŠçãšå€±ææã®åŠçãã³ãŒã«ããã¯é¢æ°ã§ç»é²ãã - @yumiya - `console.error`ã§ã¯ã¡ãã»ãŒãžãšå ±ã«ã¹ã¿ãã¯ãã¬ãŒã¹ãåºåããã - `Error Cause`ã¯äŸå€ãç·šéããŠããšã©ãŒã¡ãã»ãŒãžãç»é²ããéã«äœ¿ããšè¯ãããïŒãã°ã¡ãã»ãŒãžç·šéïŒ - åæåŠçã»éåæåŠçã¯ãã©ãŠã¶ã®ã³ã³ãœãŒã«ã§å®è¡ããŠèŠããšãåãããããããããã - éåæåŠçã¯ã¡ã€ã³ã¹ã¬ããã§å®è¡ããããããçŽåã«éãåæåŠçããããšãéåæåŠçã®å®è¡ãé ãã - WebWorkAPIã§å¯Ÿå¿ãã - éåæåŠçã§ã¯`try...catch`æ§æã䜿ã£ãŠãéåæçã«çºçããäŸå€ããã£ããã§ããªã - éåæåŠçã®**å€**ãããéåæåŠçã®**å ã§çºçããäŸå€**ã¯ãã£ããã§ããªã - `Promise`ã€ã³ã¹ã¿ã³ã¹ã¯ãæåæãšå€±ææã®ç¶æ ã衚ããªããžã§ã¯ã - `then`ã`catch`ã䜿ã - thenã¡ãœããã«ã¯`resolve`ãš`reject`ãæž¡ã <hr/> ## ð 2024-6-22(å) Skip <hr/> ## ð 2024-6-23(æ¥) Skip <hr/> ## ð 2024-6-29(å) ### ð§ð»âð» ãã¡ã·ãª/ãã©ã€ã㌠- ãã¡ã·ãª: @hoge - ãã©ã€ããŒ: @hoge ### ð èªãã ãšãã - from - https://jsprimer.net/basic/async/#promise-then-and-catch - to - https://jsprimer.net/basic/async/#promise-status ### 次å - https://jsprimer.net/basic/async/#promise-resolve ### ð åŠãã ããšã»ææ³ã»éè« - @sugiwe - thenã¡ãœãããcatchã¡ãœããã®äœ¿ãæ¹ - Promiseã¯ã©ã¹ã«ã¯thenã¡ãœãããçšæãããŠãããthenã¡ãœããã¯2ã€ã®ã³ãŒã«ããã¯é¢æ°ãåŒæ°ã«åã - 2ã€ã®åŒæ°ã®åãç®ãæ¢ãã®ããæ £ããŠãªãã®ã§é 匵ã - 2ã€ã®åŒæ°ïŒæåãšå€±æïŒã©ã¡ããçç¥ã§ããïŒæåããæ³å®ããªãã®ã§ããã°å€±æã®æ¹ã¯çç¥ãããšãïŒ - 倱æã ãããã£ãŠæã¯thenãããªãcatchã䜿ããšè¯ã - Promiseã€ã³ã¹ã¿ã³ã¹ã«ã¯å éšçã«3ã€ã®ç¶æ ããã - Fulfilled - Rejected - Pending - PendingäžïŒã¬ã³ãžã§ãã³ããŠãéïŒã«ä»ã®äœæ¥ããããã€ã¡ãŒãž - Fulfilledã»Rejectedãšãªã£ãããã以éå€åããªãïŒãã³ããåŸããããã«å€ããããšã¯ã§ããªãïŒ - éåæåŠçãäœãããã£ãŠããªãããšãæ¹ããŠããã£ãŠããã£ãïŒïŒïŒ - @kitarou888 - thenã¡ãœããã«å€±ææã®ã³ãŒã«ããã¯é¢æ°ãç»é²ã§ãã - fulfilledç¶æ ãšrejectedç¶æ ãåãããŠsettledç¶æ ãšãããâ察ããŠçµæåŸ ã¡ã®ãšãã¯pendingç¶æ - ãã¹ãŠã®éåæåŠçãPromiseãè¿ãããã§ã¯ãªããPromiseãè¿ããªã颿°ïŒsetTimeoutãdb.runãïŒïŒã¯Promiseã§ã©ããããŠããããšæ±ãããããªã - 第äºéšãããæãã§ããããïŒïŒãããããªãæ¯åæ©èµ·ãããã°ãããïŒ - ã€ãã³ãã«ãŒãã®zennèšäºã第äžéšã ãã§ãããšèããŠãããããæ°åºãïŒãã®é±æ«ããããŒãŒãŒãŒãŒãŒãŒãŒãŒãŒãŒãŒãŒ - @haruguchi - å é±é¢šéªåŒããŠã ãã¶é²ãã ãšæã£ããã©ãskipã ã£ãã®ãã - ãšããããæžãæ¹èŠãããšè¯ãã®ããªã(é£ãã話ã¯çœ®ããŠãããŠ) - ãã ããµã³ãã«ã³ãŒãã¯åºæ¬çã«æåã確èªããããã®ã³ãŒãã ãããæ®éã«ãããªã³ãŒãã¯æžããªãããšã«æ³šæ - éåæã®ç®çâPromiseã®æžãæ¹âasync awaitãžã®å€æâã€ãã³ãã«ãŒãã®çè§£ ãšããé ã§ããã°ããã®ã§æåããé£ãã話ã°ã£ããèŠããŠãããã©ãããã - @karlley - Promiseã¯2ã€ã®ã³ãŒã«ããã¯é¢æ°ãåŒæ°ã«ãšã - 第1åŒæ°: æåæã«å®è¡ããã颿°ãresolve -> then - 第2åŒæ°: 倱ææã«å®è¡ããã颿°ãreject -> catch - Promiseã®3ã€ã®ç¶æ - æåãFulfilled - 倱æãRejicted - å®è¡äž/åŸ æ©äž(æå/倱æã確å®ããŠããªã)ãPending - ããããpendingã£ãŠä¿çã£ãŠæå³ã ããããã§èŠãããšãããã - éåæã¯å šéšã¬ã³ãžã®è©±ã§èª¬æããŠãããã°çè§£ããããããšãããã£ãïŒïŒ - Promiseã䜿ãç®çãããããçè§£ããŠããªãã®ã§åŸ©ç¿ããŸã - @yumiya - `Promise`ã®å€±ææã¯ã`then(undefined, onRejected)`ã®ããã«ç¬¬1åŒæ°ã«`undefined`ãæž¡ã - 倱æã®å Žåã«`then`ã䜿ãããã`catch(ã³ãŒã«ããã¯é¢æ°)`ã䜿ãã»ãããã - ïŒåºæ¬ïŒ`setTimeout`ã¯éåæåŠçã ã`Promise`ãè¿ããªã - ãåèã - [Node.js v22.3.0 documentation](https://nodejs.org/docs/latest/api/timers.html) - [ã€ãã³ãã«ãŒããšãããã¹ãã§ãŒã³ã§åŠã¶JavaScriptã®éåæåŠç](https://zenn.dev/estra/books/js-async-promise-chain-event-loop) - `Promise`å ã§äŸå€ãçºçãããšã`then`ã®ç¬¬2åŒæ°ã`catch`ã¡ãœããã§ç»é²ãããšã©ãŒæã®ã³ãŒã«ããã¯é¢æ°ãåŒã°ãã - `Promise`ã¯3ã€ã®ç¶æ ããã - `FulFilled`ïŒæåæ - `Rejected`ïŒå€±æãŸãã¯äŸå€æ - `Pending`ïŒäžã®ã©ã¡ãã§ããªãç¶æ ïŒ`new Promise`ã§ã€ã³ã¹ã¿ã³ã¹ãäœæããåæç¶æ ïŒ - `Pending` â FulFilled or Rejectedã«å€åããç¶æ ãå€åããåŸã¯äžå€ïŒ`Settled`ïŒãšãªã - `Pending`ã®ç¶æ ã«ããŠãä»ã®åŠçãé²ãã - `Pending`ã®ã€ã¡ãŒãžïŒèª¿çäžãã¬ã³ãžã«å ¥ãå ç±ããŠããç¶æ ïŒãã®éã«ä»ã®äœæ¥ãé²ããïŒ - `Promise`ã€ã³ã¹ã¿ã³ã¹ã®ç¶æ ã¯äžåºŠããå€åããªã - @genny (ã©ãžãªåå ã®ããèªã¿äžããªãã§mm) - Promise ã®åŸ©ç¿ãã§ããŠããã£ã - Async/Await ãå®å šã«é°å²æ°ã§äœ¿ã£ãŠããã®ã§ãææ¥ãåå ã§ããããã«é 匵ã - æè¿æ¥äžãçµæ§ããŒãã§åå ãäžå®æã«ãªã£ãŠãŸãããåŒãç¶ãäžå®æãªç¶æ ãç¶ããšæããŸãmm - èªåããã¹ãããã©ã¯ãã£ã¹ã¯éåæåŠçã®ã²ã®åããªãã£ãã®ãâŠãšè¡æãåããŠããŸãïŒç¢ºãã«ç°¡åã ã£ãïŒ - æ°ããæ¹ããã <hr/> ## ð 2024-6-30(æ¥) ### ð§ð»âð» ãã¡ã·ãª/ãã©ã€ã㌠- ãã¡ã·ãª: @yumiya - ãã©ã€ããŒ: @sugiwe ### ð èªãã ãšãã - from - https://jsprimer.net/basic/async/#promise-resolve - to - https://jsprimer.net/basic/async/#promise-finally ### 次å - https://jsprimer.net/basic/async/#promise-sequential ### ð åŠãã ããšã»ææ³ã»éè« - @sugiwe - Promise.resolveã¡ãœããã¯Fulfilledã®ç¶æ ãšãªã£ãPromiseã€ã³ã¹ã¿ã³ã¹ãäœæãã - Promise.resolveã¡ãœããã¯new Promiseã®ç³è¡£æ§æã§ãã·ã³ãã«ã«ããã - å šãŠã®åæçãªåŠçãå®è¡ãããåŸã«éåæã®åŠçãå®è¡ããã - ã³ã³ã¹ãã©ã¯ã¿é¢æ°ãããå Žåã¯ãŸããããå®è¡ããããã€ãŸããã³ã³ã¹ãã©ã¯ã¿é¢æ°ãåæåŠçãéåæåŠçã®é çªã§å®è¡ããã - Promise.rejectã¡ãœãã㯠Rejectedã®ç¶æ ãšãªã£ãPromiseã€ã³ã¹ã¿ã³ã¹ãäœæãã - Promiseãã§ãŒã³ - fulfilledããŠãã®åŸã«ç¶ãthenãé çªã«å®è¡ããã - rejectedãããå Žåã¯ãfulfilledããã³ããã«ç¶ãthenã¯ç¡èŠããŠrejectedãå®è¡ãããŠããããã®åŸã«rejectedã«ç¶ãthenãããã°ãããé çªã«å®è¡ãããïŒïŒ - Promiseãã§ãŒã³ãããããããŠãŸã ç解远ãã€ããŠããªãã®ã§åŸ©ç¿ããŸã⊠- finallyã¡ãœããã¯ãæåã»å€±æã©ã¡ãã®å Žåã§ãåŒã³åºãããã³ãŒã«ããã¯é¢æ° - @yumiya - `Fulfilled`ç¶æ ã¯`Promise.resolve` ã`Rejected`ç¶æ ã¯`Promise.reject` ã®ããã«ã·ã³ã¿ãã¯ã¹ã·ã¥ã¬ãŒãçšæãããŠãã - ã·ã³ã¿ãã¯ã¹ã·ã¥ã¬ãŒïŒåãæå³ã®åŠçãå ã®æ§æããã·ã³ãã«ã«æžããå¥ã®æžãæ¹ã®ããš - `then`ã`catch`ãã€ãªããŠã¡ãœããããã§ãŒã³ããŠåŠçããŠããããšãã§ãã - `Fulfilled`ã®ç¶æ ãªã`then`ã¡ãœãããå®è¡ãããŠãã - `Rejected`ã®ç¶æ ãªã`catch`ã¡ãœãããå®è¡ãããŠãã - `Promise`å ã«ã³ã³ã¹ãã©ã¯ã¿åŠçãããå Žåã¯ãããå®è¡ãããç¶ããŠåæçãªåŠçãå®è¡ãããæåŸã«éåæçã«ã³ãŒã«ããã¯é¢æ°ãåŒã°ãã - `Promise`ãã§ãŒã³ã§äžåºŠãã£ãããããšã次ã«åŒã°ããã®ã¯æåæã®åŠçïŒ`then`ã¡ãœããïŒ - `then`ã¡ãœããå ã§äŸå€ãçºçããããšã次ã®ïŒæãè¿ãïŒ`catch`ã¡ãœãããå®è¡ããã - 次ã®`catch`ã¡ãœãããŸã§ã®éã«`then`ããã£ãŠãå®è¡ãããªã - `finally`ã¡ãœããã¯ãæåïŒ`then`ã¡ãœããïŒãŸãã¯å€±æïŒ`catch`ã¡ãœããïŒæã®ããšã«åŒã³ã ããã³ãŒã«ããã¯é¢æ° - `tryâŠcatchâŠfinally`æ§æã®`finally`ç¯ãšåã <hr/>
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up