æ°å¹ŽåãNode.jsã§åãå§ãããšããã
ã³ãŒã«ããã¯å°ç ããšåŒã°ãããã®ãæããªããŸãã
ã ãããããã®å°çããæãåºãã®ã¯ããã»ã©ç°¡åã§ã¯ãããŸããã§ããã ãã ããçŸåšNode.jsã«ã¯ææ°ã®æãè峿·±ãJavaScriptæ©èœãå«ãŸããŠããŸãã ç¹ã«ã
ããŒãžã§ã³4以éã®Nodeã¯ãããã¹ããµããŒãããŠããŸãã ã³ãŒã«ããã¯ã§æ§æãããè€éãªãã¶ã€ã³ããéããããšãã§ããŸãã

ã³ãŒã«ããã¯ã®ä»£ããã«ãããã¹ã䜿çšãããšãèªã¿ãããããç°¡æœãªã³ãŒããäœæã§ããŸãã ãã ãããããã«ç²ŸéããŠããªã人ã«ãšã£ãŠã¯ãç¹ã«æç¢ºã«èŠããªããããããŸããã ãã®èšäºã§ã¯ãPromiseãæäœããããã®åºæ¬çãªãã³ãã¬ãŒãã瀺ããäžé©åãªã¢ããªã±ãŒã·ã§ã³ãåŒãèµ·ããå¯èœæ§ã®ããåé¡ã«ã€ããŠã®ã¹ããŒãªãŒãå
±æããããšæããŸãã
ããã§ã¯
ç¢å°é¢æ°ã䜿çšããããšã«æ³šæããŠãã ããã ãããã«ç²ŸéããŠããªãå Žåããããã¯è€éã§ã¯ãªããšèšã䟡å€ããããŸããããã®å Žåããããã®æ©èœã«é¢ãã
è³æãèªãããšããå§ãããŸãã
ãã¿ãŒã³
ãã®ã»ã¯ã·ã§ã³ã§ã¯ãçŽæãããã³ããããæ£ãã䜿çšããæ¹æ³ã«ã€ããŠèª¬æããã¢ããªã±ãŒã·ã§ã³ã®ããã€ãã®ãã¿ãŒã³ã瀺ããŸãã
ProçŽæã®äœ¿çš
ãã§ã«ãããã¹ããµããŒãããŠãããµãŒãããŒãã£ã®ã©ã€ãã©ãªã䜿çšããå Žåããããã®äœ¿çšã¯éåžžã«ç°¡åã§ãã ã€ãŸãã
then()
ãš
catch()
2ã€ã®é¢æ°ã«æ³šæããå¿
èŠããããŸãã ããšãã°ã
getItem()
ã
updateItem()
ãããã³
deleteItem()
3ã€ã®ã¡ãœãããæã€APIãããããããããpromiseãè¿ããŸãã
Promise.resolve() .then(_ => { return api.getItem(1) }) .then(item => { item.amount++ return api.updateItem(1, item); }) .then(update => { return api.deleteItem(1); }) .catch(e => { console.log('error while working on item 1'); })
å
then()
åŒã³åºãã¯ãPromiseã®ãã§ãŒã³ã«å¥ã®ã¹ããããäœæããŸãã ãã§ãŒã³å
ã®ã©ããã§ãšã©ãŒãçºçãããšã倱æããã»ã¯ã·ã§ã³ã®èåŸã«ãã
catch()
ãããã¯ãåŒã³åºãããŸãã
then()
ããã³
catch()
ã¡ãœããã¯ãäœããã®å€ãŸãã¯æ°ããpromiseãè¿ãããšãã§ããçµæã¯ãã§ãŒã³å
ã®æ¬¡ã®
then()
æŒç®åã«æž¡ãããŸãã
ããã§ãæ¯èŒã®ããã«ãã³ãŒã«ããã¯ã䜿çšããåãããžãã¯ã®å®è£
ïŒ
api.getItem(1, (err, data) => { if (err) throw err; item.amount++; api.updateItem(1, item, (err, update) => { if (err) throw err; api.deleteItem(1, (err) => { if (err) throw err; }) }) })
ãã®ã³ãŒããšåã®ã³ãŒãã®æåã®éãã¯ãã³ãŒã«ããã¯ã®å Žåãåäžã®ãããã¯ã䜿çšããŠãã¹ãŠã®ãšã©ãŒãåŠçããã®ã§ã¯ãªããããã»ã¹ã®åã¹ãããã§ãšã©ãŒåŠçãå«ããå¿
èŠãããããšã§ãã ã³ãŒã«ããã¯ã®2çªç®ã®åé¡ã¯ãã¹ã¿ã€ã«ã«é¢ãããã®ã§ãã åã¹ãããã衚ãã³ãŒããããã¯ã¯æ°Žå¹³æ¹åã«æŽåããŠãããããçŽæã«åºã¥ããŠã³ãŒããèŠããšãã«æãããªäžé£ã®æäœãç¥èŠããããšã¯å°é£ã§ãã
callbackã³ãŒã«ããã¯ããããã¹ã«å€æãã
ã³ãŒã«ããã¯ãããããã¹ã«åãæ¿ãããšãã«åŠã¶æåã®ã³ãã®1ã€ã¯ãã³ãŒã«ããã¯ããããã¹ã«å€æããããšã§ãã ããšãã°ãã³ãŒã«ããã¯ããŸã 䜿çšããŠããã©ã€ãã©ãªã䜿çšããå ŽåããŸãã¯ãããã䜿çšããŠèšè¿°ãããç¬èªã®ã³ãŒãã䜿çšããå Žåããããå¿
èŠã«ãªãå¯èœæ§ããããŸãã ã³ãŒã«ããã¯ãããããã¹ãžã®ç§»è¡ã¯ããã»ã©é£ãããããŸããã æ¬¡ã«ã
fs.readFile
ããŒã¹ã®Node
fs.readFile
颿°ã
fs.readFile
ã䜿çšãã颿°ã«å€æããäŸã瀺ã
fs.readFile
ã
function readFilePromise(filename) { return new Promise((resolve, reject) => { fs.readFile(filename, 'utf8', (err, data) => { if (err) reject(err); else resolve(data); }) }) } readFilePromise('index.html') .then(data => console.log(data)) .catch(e => console.log(e))
ãã®æ©èœã®åºç€ã¯
Promise
ã³ã³ã¹ãã©ã¯ã¿ãŒã§ãã 颿°ã䜿çšããŸãããã®é¢æ°ã«ã¯ã
resolve
ãš
reject
2ã€ã®ãã©ã¡ãŒã¿ãŒãããããããã颿°ã§ãã ãã®é¢æ°å
ã§ã¯ããã¹ãŠã®äœæ¥ãå®äºããå®äºãããšã
resolve
åŒã³åºããããšã©ãŒãçºç
reject
å Žåã¯
reject
ãŸãã
ãã®çµæã1ã€ã®ããšã
resolve
å¿
èŠãããããšã«æ³šæããŠãã ãã
resolve
ãŸãã¯
reject
ããããã§ããããã®åŒã³åºãã¯1åã ãè¡ãå¿
èŠããããŸãã ãã®äŸã§ã¯ã
fs.readFile
ããšã©ãŒãè¿ããå Žåããã®ãšã©ãŒã
reject
æž¡ããŸãã ãã以å€ã®å Žåã¯ããã¡ã€ã«ããŒã¿ãæž¡ããŠ
resolve
ã
resolve
ã
Valueså€ãçŽæã«å€æãã
ES6ã«ã¯ãéåžžã®å€ãããããã¹ãäœæããããã®äŸ¿å©ãªãã«ããŒé¢æ°ãããã€ããããŸãã ãããã¯
Promise.resolve()
ããã³
Promise.reject()
ã§ãã ããšãã°ãpromiseãè¿ãå¿
èŠãããããããã€ãã®ã±ãŒã¹ãåæçã«åŠçãã颿°ããããšããŸãã
function readFilePromise(filename) { if (!filename) { return Promise.reject(new Error("Filename not specified")); } if (filename === 'index.html') { return Promise.resolve('<h1>Hello!</h1>'); } return new Promise((resolve, reject) => {}) }
Promise.reject()
åŒã³åºããšãã«äœã§ãïŒãŸãã¯äœã§ãïŒæž¡ãããšãã§ããŸããããã®ã¡ãœããã«ã¯åžžã«
Error
ãªããžã§ã¯ããæž¡ãããšããå§ãããŸãã
promiseçŽæã®åæå®è¡
Promise.all() â
ã
Promise.all() â
é
åãåæã«å®è¡ããããã®äŸ¿å©ãªã¡ãœããã§ãã ããšãã°ããã£ã¹ã¯ããèªã¿åããããã¡ã€ã«ã®ãªã¹ãããããšããŸãããã åã«äœæãã
readFilePromise
颿°ã䜿çšãããšããã®åé¡ã®è§£æ±ºçã¯æ¬¡ã®ããã«ãªããŸãã
let filenames = ['index.html', 'blog.html', 'terms.html']; Promise.all(filenames.map(readFilePromise)) .then(files => { console.log('index:', files[0]); console.log('blog:', files[1]); console.log('terms:', files[2]); })
åŸæ¥ã®ã³ãŒã«ããã¯ã䜿çšããŠåçã®ã³ãŒããèšè¿°ããããšããããŸããã ãã®ãããªã³ãŒãã¯æ··ä¹±ãæããããããšã©ãŒãçºçãããããšèšãã ãã§ååã§ãã
âäžè²«ããçŽæ
ããã€ãã®çŽæãåæã«å®è¡ãããšããã©ãã«ãçºçããå ŽåããããŸãã ããšãã°ã
Promise.all
ã䜿çšããŠAPIããå€ãã®ãªãœãŒã¹ãååŸããããšãããšãããã¯APIã§ããããã°ããããŠããã¢ã¯ã»ã¹é »åºŠã®å¶éãè¶
ãããšã
429ãšã©ãŒã
çæãããå¯èœæ§ãéåžžã«é«ããªã
ãŸã ã
ãã®åé¡ã®è§£æ±ºçã®1ã€ã¯ãPromiseãé çªã«å®è¡ããããšã§ãã æ®å¿µãªãããES6ã«ã¯ããã®ãããªæäœãå®è¡ããããã®
Promise.al
lã®åçŽãªé¡äŒŒç©ã¯ãããŸããïŒçç±ãç¥ãããã®ã§ããïŒãããããããã§ã¯
Array.reduceã¡ãœããã圹ç«ã¡ãŸãã
let itemIDs = [1, 2, 3, 4, 5]; itemIDs.reduce((promise, itemID) => { return promise.then(_ => api.deleteItem(itemID)); }, Promise.resolve());
ãã®å Žåãæ¬¡ã®åŒã³åºããè¡ãåã«ã
api.deleteItem()
çŸåšã®åŒã³åºã
api.deleteItem()
ããã®ãåŸ
ã¡ãŸãã ãã®ã³ãŒãã¯ãããã§ãªããã°åèŠçŽ èå¥åã«å¯ŸããŠ
then()
ã䜿çšããŠæžãæããå¿
èŠãããæäœãåŠçãã䟿å©ãªæ¹æ³ã瀺ããŠããŸãã
Promise.resolve() .then(_ => api.deleteItem(1)) .then(_ => api.deleteItem(2)) .then(_ => api.deleteItem(3)) .then(_ => api.deleteItem(4)) .then(_ => api.deleteItem(5));
âãããã¹ã¬ãŒã¹
ES6ã§äœ¿çšã§ãããã1ã€ã®äŸ¿å©ãªãã«ããŒé¢æ°ã¯ïŒã»ãšãã©äœ¿çšããŸãããïŒ
Promise.race
ã§ãã
Promise.all
ãšåæ§ã«ã
Promise.all
ã®é
åãåãå
¥ããŠåæã«å®è¡ããŸããã
Promise.all
ãããããå®è¡ãŸãã¯æåŠããããšããã«è¿ãããŸãã ä»ã®çŽæã®çµæã¯ç Žæ£ãããŸãã
ããšãã°ããã°ãããããšå€±æãããããã¹ãäœæããå¥ã®ãããã¹ã§è¡šããããã¡ã€ã«ã®èªã¿åãæäœã«å¶éãèšå®ããŸãã
function timeout(ms) { return new Promise((resolve, reject) => { setTimeout(reject, ms); }) } Promise.race([readFilePromise('index.html'), timeout(1000)]) .then(data => console.log(data)) .catch(e => console.log("Timed out after 1 second"))
ä»ã®çŽæã¯åŒãç¶ãå®è¡ãããããšã«æ³šæããŠãã ãã-åã«çµæã衚瀺ãããŸããã
âãšã©ãŒãã©ãã
.catch()
ãšã©ãŒããã£ããããéåžžã®æ¹æ³ã¯ããã§ãŒã³ã®æåŸã«
.catch()
ãããã¯ã远å ããããšã§ããããã«ãããåã®
.then()
ãããã¯ã®ããããã§çºçãããšã©ãŒããã£ããããŸãã
Promise.resolve() .then(_ => api.getItem(1)) .then(item => { item.amount++; return api.updateItem(1, item); }) .catch(e => { console.log('failed to get or update item'); })
getItem
ãŸãã¯
updateItem
ããããã倱æãããšã
catch()
ãããã¯ãããã§åŒã³åºãããŸãã ããããå
±åãšã©ãŒåŠçãäžèŠã§ã
getItem
ã§çºçãããšã©ãŒãåå¥ã«åŠçããå¿
èŠãããå Žåã¯
getItem
ã§ããããã ãããè¡ãã«ã¯ã
getItem â
åŒã³åºãã§ãããã¯ã®çŽåŸã«å¥ã®
catch()
ãããã¯ãæ¿å
¥ããŸããå¥ã®ãããã¹ãè¿ãããšãã§ããŸãã
Promise.resolve() .then(_ => api.getItem(1)) .catch(e => api.createItem(1, {amount: 0})) .then(item => { item.amount++; return api.updateItem(1, item); }) .catch(e => { console.log('failed to update item'); })
ããã§ã
getItem()
ã倱æããå Žåãã¹ãããã€ã³ããŠæ°ããèŠçŽ ãäœæããŸãã
errorsæããšã©ãŒ
then()
åŒå
ã®ã³ãŒãã¯ã
try
ãããã¯å
ã«ãããã®ããã«è§£éããå¿
èŠããããŸãã
return Promise.reject()
ã
return Promise.reject()
åŒã³åºããšã
throw new Error()
ã
throw new Error()
ããåŒã³åºãã®äž¡æ¹ããæ¬¡ã®
catch()
ãããã¯ãå®è¡ããŸãã
ããã¯ãå®è¡æãšã©ãŒã
catch()
ãããã¯ãããªã¬ãŒããããšãæå³ããŸãããã®ããããšã©ãŒåŠçã«é¢ããŠã¯ããœãŒã¹ã«ã€ããŠæšæž¬ããã¹ãã§ã¯ãããŸããã ããšãã°ã次ã®ã³ãŒããã©ã°ã¡ã³ãã§ã¯ã
catch()
ãããã¯ã¯
getItem
ãåäœãããšãã«çºçãããšã©ãŒãåŠçããããã ãã«åŒã³åºãããããšãæåŸ
ã§ããŸãããäŸã瀺ãããã«ã
then()
åŒå
ã§çºçããã©ã³ã¿ã€ã ãšã©ãŒã«ãå¿çããŸãïŒ
api.getItem(1) .then(item => { delete item.owner; console.log(item.owner.name); }) .catch(e => { console.log(e); // Cannot read property 'name' of undefined })
âãã€ãããã¯ãããã¹ãã§ãŒã³
å Žåã«ãã£ãŠã¯ãçŽæã®é£éãåçã«æ§ç¯ããå¿
èŠããããŸããã€ãŸããç¹å®ã®æ¡ä»¶ãæºãããããšãã«è¿œå ã®ã¹ãããã远å ããå¿
èŠããããŸãã æ¬¡ã®äŸã§ã¯ãæå®ããããã¡ã€ã«ãèªã¿åãåã«ãå¿
èŠã«å¿ããŠããã¯ãã¡ã€ã«ãäœæããŸãã
function readFileAndMaybeLock(filename, createLockFile) { let promise = Promise.resolve(); if (createLockFile) { promise = promise.then(_ => writeFilePromise(filename + '.lock', '')) } return promise.then(_ => readFilePromise(filename)); }
ãã®ãããªç¶æ³ã§ã¯ã圢åŒ
promise = promise.then(/*...*/)
æ§é ã䜿çšããŠ
promise
å€ãæŽæ°ããå¿
èŠããããŸãã ãã®äŸã«é¢é£ããã®ã¯ããMultiple Calls .thenïŒïŒãã»ã¯ã·ã§ã³ã§åŸè¿°ããããšã§ãã
ã¢ã³ããã¿ãŒã³
çŽæã¯ãã¡ããšããæœè±¡åã§ãããããããšé£æºããããšã¯èœãšãç©Žã«æºã¡ãŠããŸãã ããã§ãPromiseãæäœãããšãã«ééããå
žåçãªåé¡ãããã€ãæ€èšããŸãã
å°çã®ã³ãŒã«ããã¯ã®åæ§ç¯
ã³ãŒã«ããã¯ãããããã¹ã«ç§»è¡ãå§ããã°ããã®ãšããå€ãç¿æ
£ãæŸæ£ããã®ã¯é£ããããšãããããã³ãŒã«ããã¯ã®ããã«ãäºãã«ãããã¹ãå
¥ããããšã«æ°ä»ããŸããã
api.getItem(1) .then(item => { item.amount++; api.updateItem(1, item) .then(update => { api.deleteItem(1) .then(deletion => { console.log('done!'); }) }) })
å®éã«ã¯ããã®ãããªèšèšã¯ã»ãšãã©å¿
èŠãããŸããã ãã¹ãã®1ã€ãŸãã¯2ã€ã®ã¬ãã«ãé¢é£ã¿ã¹ã¯ã®ã°ã«ãŒãåã«åœ¹ç«ã€å ŽåããããŸããããã¹ãããããããã¹ã¯ã»ãšãã©ã®å Žåã
.then()
æ§æãããåçŽãã§ãŒã³ãšããŠæžãæããããŸãã
returnæ»ãã³ãã³ãããããŸãã
ç§ãééããäžè¬çã§æå®³ãªãšã©ãŒã¯ãäžé£ã®çŽæã®äžã§
return
åŒã³åºããå¿ããŠãã
return
ã§ãã ããšãã°ããã®ã³ãŒãã§ãšã©ãŒãèŠã€ããããšãã§ããŸããïŒ
api.getItem(1) .then(item => { item.amount++; api.updateItem(1, item); }) .then(update => { return api.deleteItem(1); }) .then(deletion => { console.log('done!'); })
ãšã©ãŒã¯ã4è¡ç®ã®
api.updateItem
åã«
return
åŒã³åºããé
眮ãââãªãã£ã
return
ã§ãããã®ç¹å®ã®
then()
ãããã¯ã¯ããã«è§£æ±ºãããŸãã ãã®çµæã
api.updateItem()
åã«
api.updateItem()
åŒã³åºãããå¯èœæ§ããããŸãã
ç§ã®æèŠã§ã¯ãããã¯ES6ã®çŽæã®å€§ããªåé¡ã§ãããäºæž¬ã§ããªãåäœã«ã€ãªããããšããããããŸãã åé¡ã¯ã
then()
ãå€ãŸãã¯æ°ãã
Promise
ãªããžã§ã¯ããè¿ãäžæ¹ã§ã
undefined
è¿ãå¯èœæ§ãããããšã§ãã å人çã«ãJavaScript Promises APIãæ
åœããŠããå Žåã
.then()
ãããã¯ã
undefined
è¿ããå Žåãã©ã³ã¿ã€ã ãšã©ãŒãçºçããŸãã ãã ãããã®ãããªããšã¯èšèªã«ã¯å®è£
ãããŠããªããããæ³šæããŠãäœæãããããã¹ããæç€ºçã«åŸ©åž°ããå¿
èŠããããŸãã
ãè€æ°ã®.thenïŒïŒåŒã³åºã
ããã¥ã¡ã³ãã«ãããšãåãçŽæã§
.then()
äœåºŠãåŒã³åºãããšãã§ããã³ãŒã«ããã¯ã¯ç»é²ãããã®ãšåãé åºã§åŒã³åºãããŸãã ããããããããæ¬åœã®çç±ãèŠãããšã¯ãããŸããã ãã®ãããªã¢ã¯ã·ã§ã³ã¯ãpromiseã«ãã£ãŠè¿ãããå€ã䜿çšãããããšã©ãŒãåŠçããããããšãã«ãçè§£ã§ããªãçµæãããããå¯èœæ§ããããŸãã
let p = Promise.resolve('a'); p.then(_ => 'b'); p.then(result => { console.log(result) // 'a' }) let q = Promise.resolve('a'); q = q.then(_ => 'b'); q = q.then(result => { console.log(result) // 'b' })
ãã®äŸã§ã¯ã
then()
åŒã³åºããããšãã«
p
ã®å€ãæŽæ°ããŠããªãããã
'b'
è¿ãããããšã¯ãããŸããã Promis
q
ããäºæž¬å¯èœ
q
ãthen
then()
åŒã³åºãããšã§æ¯åæŽæ°ããŸãã
åãããšããšã©ãŒåŠçã«ãåœãŠã¯ãŸããŸãã
let p = Promise.resolve(); p.then(_ => {throw new Error("whoops!")}) p.then(_ => { console.log('hello!'); // 'hello!' }) let q = Promise.resolve(); q = q.then(_ => {throw new Error("whoops!")}) q = q.then(_ => { console.log('hello'); // })
ããã§ã¯ãPromiseã®ãã§ãŒã³ã®å®è¡ãäžæãããšã©ãŒãäºæ³ãããŸããã
p
ã®å€ã¯æŽæ°ãããªãããã2çªç®ã®
then()
ãŸãã
.then()
ãè€æ°ååŒã³åºããšãå
ã®ãããã¹ããããã€ãã®æ°ããç¬ç«ãããããã¹ãäœæã§ããŸããããã®å¹æã®å®éã®ã¢ããªã±ãŒã·ã§ã³ãèŠã€ããããšãã§ããŸããã§ããã
callbackã³ãŒã«ããã¯ãšãããã¹ã®æ··å
PromiseããŒã¹ã®ã©ã€ãã©ãªã䜿çšããŠããããã³ãŒã«ããã¯ããŒã¹ã®ãããžã§ã¯ãã§äœæ¥ããŠããå Žåãå¥ã®anotherã«é¥ããããã§ãã
then()
ãŸãã¯
catch() â
ãããã¯ããã³ãŒã«ããã¯ãåŒã³åºããªãããã«ããŸããããããªããšãpromiseã¯æ¬¡ã®ãšã©ãŒããã¹ãŠåžåããpromiseãã§ãŒã³ã®äžéšãšããŠæ±ããŸãã 以äžã«ãã³ãŒã«ããã¯ã§ãããã¹ãã©ããããäŸã瀺ããŸããäžèŠãããšãããå®éã®äœ¿çšã«éåžžã«é©ããŠããããã«æããŸãã
function getThing(callback) { api.getItem(1) .then(item => callback(null, item)) .catch(e => callback(e)); } getThing(function(err, thing) { if (err) throw err; console.log(thing); })
ããã§ã®åé¡ã¯ããšã©ãŒãçºçããå Žåã
catch()
ãããã¯ããã§ãŒã³å
ã«ååšããã«ããããããããæªåŠçã®ãããã¹ã®æåŠããšããèŠåã衚瀺ãããããšã§ãã ããã¯ã
callback()
ã
then()
å
ãš
catch()
å
ã®äž¡æ¹ã§åŒã³åºãããPromiseã®ãã§ãŒã³ã®äžéšã«ãªãããã§ãã
ã³ãŒã«ããã¯ã§ãããã¹ã絶察ã«ã©ããããå¿
èŠãããå Žåã¯ã
setTimeout
颿°ããŸãã¯Node.jsã®
process.nextTick
ã䜿çšããŠãããã¹ãçµäºã§ããŸãã
function getThing(callback) { api.getItem(1) .then(item => setTimeout(_ => callback(null, item))) .catch(e => setTimeout(_ => callback(e))); } getThing(function(err, thing) { if (err) throw err; console.log(thing); })
aughtãšã©ãŒããã£ãã
JavaScriptãšã©ãŒåŠçã¯å¥åŠãªããšã§ãã ããã¯ãå€å
žçãª
try/catch
ãã©ãã€ã ããµããŒãããŸãããããšãã°Javaã§è¡ãããããã«ããããåŒã³åºãæ§é ã«ãã£ãŠåŒã³åºãããã³ãŒãã§ã®ãšã©ãŒåŠçããµããŒãããŸããã ãã ããJSã§ã¯ãã³ãŒã«ããã¯ã®äœ¿çšãäžè¬çã§ããããã®æåã®ãã©ã¡ãŒã¿ãŒã¯ãšã©ãŒãªããžã§ã¯ãã§ãïŒãã®ãããªã³ãŒã«ããã¯ã¯errbackãšãåŒã°ããŸãïŒã ããã«ãããã¡ãœãããåŒã³åºãã³ã³ã¹ãã©ã¯ãã¯ãå°ãªããšããšã©ãŒã®å¯èœæ§ãèæ
®ããŸãã
fs
ã©ã€ãã©ãªã®äŸã次ã«ç€ºããŸãã
fs.readFile('index.html', 'utf8', (err, data) => { if (err) throw err; console.log(data); })
Promiseã䜿çšããå Žåããšã©ãŒãæç€ºçã«åŠçããå¿
èŠãããããšãå¿ããã¡ã§ãã ããã¯ããã¡ã€ã«ã·ã¹ãã ãæäœããã³ãã³ããããŒã¿ããŒã¹ã«ã¢ã¯ã»ã¹ããã³ãã³ããªã©ããšã©ãŒã®åœ±é¿ãåããããæäœã«é¢ããŠç¹ã«åœãŠã¯ãŸããŸãã çŸåšã®ç¶æ³ã§ã¯ãæåŠããããããã¹ãååããªãå ŽåãNode.jsã§ããªãèŠèŠããèŠåã衚瀺ãããŸãã
(node:29916) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 1): Error: whoops! (node:29916) DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
ãããåé¿ããã«ã¯ãpromiseã®ãã§ãŒã³ã®æåŸã«
catch()
ã远å ããããšãå¿ããªãã§ãã ããã
ãŸãšã
çŽæã䜿çšããããã€ãã®ãã¿ãŒã³ãšåãã¿ãŒã³ãèŠãŸããã ããã§äœãã圹ã«ç«ãŠã°å¹žãã§ãã ãã ããPromiseã®ãããã¯ã¯éåžžã«åºç¯å²ã«ãããããã远å ãªãœãŒã¹ãžã®ãªã³ã¯ãããã€ã瀺ããŸãã
芪æãªãèªè
ïŒ Node.jsãããžã§ã¯ãã§ãããã¹ãã©ã®ããã«äœ¿çšããŸããïŒ