ãããã¹ã®ä½¿ãæ¹
ãããã¹ã¯ãç¾ä»£ã® JavaScript ã§éåæããã°ã©ãã³ã°ãè¡ãéã®åºç¤ã¨ãªããã®ã§ãããããã¹ã¯éåæé¢æ°ããè¿ããããªãã¸ã§ã¯ãã§ãæä½ã®ç¾å¨ã®ç¶æ ã表ãã¾ãããããã¹ãå¼ã³åºãå ã«è¿ãããæç¹ã§ã¯ãæä½ãå®äºãã¦ããªããã¨ãå¤ãã®ã§ããããããã¹ãªãã¸ã§ã¯ãã¯æçµçãªæä½ã®æåã失æãå¦çããããã®ã¡ã½ãããæä¾ãã¦ãã¾ãã
| åææ¡ä»¶: | JavaScript ã®åºæ¬ããã£ããã¨çè§£ãã¦ãããã¨ã |
|---|---|
| å¦ç¿ææ: |
|
åã®è¨äºã§ãéåæé¢æ°ãå®è£ ããããã«ã³ã¼ã«ããã¯ã使ç¨ãããã¨ãã話ãã¾ããããã®è¨è¨ã§ã¯ãã³ã¼ã«ããã¯é¢æ°ã渡ããªãããéåæé¢æ°ãå¼ã³åºãã¾ãã颿°ã¯ããã«è¿å¤ãè¿ããå¦çãå®äºãããã³ã¼ã«ããã¯ãå¼ã³åºãã¾ãã
ãããã¹ãã¼ã¹ã® API ã§ã¯ãéåæé¢æ°ãå¦çãéå§ãã Promise ãªãã¸ã§ã¯ããè¿ãã¾ãããã®å¾ããã®ãããã¹ãªãã¸ã§ã¯ãã«ãã³ãã©ã¼ãå²ãå½ã¦ãã°ãæä½ãæåããã¨ãã失æããã¨ãã«ãã³ãã©ã¼ãå®è¡ããã¾ãã
fetch() API ã®ä½¿ç¨
ã¡ã¢: ãã®è¨äºã§ã¯ããã¼ã¸ãããã©ã¦ã¶ã¼ã® JavaScript ã³ã³ã½ã¼ã«ã«ã³ã¼ããµã³ãã«ãã³ãã¼ãããã¨ã§ããããã¹ãæ¢ãã¾ããè¨å®ããã«ã¯ã以ä¸ã®ããã«ãã¦ãã ããã
- ãã©ã¦ã¶ã¼ã®ã¿ããéã㦠https://example.org ãéãã¦ãã ããã
- ãã®ä»é¨ã®ä¸ã§ããã©ã¦ã¶ã¼ã®éçºè ãã¼ã«ã® JavaScript ã³ã³ã½ã¼ã«ãéãã¦ãã ããã
- ä¾ã示ãããããããã³ã³ã½ã¼ã«ã«ã³ãã¼ãã¦ãã ãããæ°ããä¾ãå
¥åãããã³ã«ãã¼ã¸ãåèªã¿è¾¼ã¿ããå¿
è¦ãããã¾ããããããªãã¨ãã³ã³ã½ã¼ã«ã
fetchPromiseãå宣è¨ãããã¨ã«ã¯ã¬ã¼ã ãä»ãã¦ããã§ãããã
ãã®ä¾ã§ã¯ã https://mdn.github.io/learning-area/javascript/apis/fetching-data/can-store/products.json ãã JSON ãã¡ã¤ã«ããã¦ã³ãã¼ãããããã«é¢ããããã¤ãã®æ å ±ããã°ã«è¨é²ãã¾ãã
ãããè¡ãã«ã¯ããµã¼ãã¼ã« HTTP ãªã¯ã¨ã¹ããè¡ãã¾ãã HTTP ãªã¯ã¨ã¹ãã§ã¯ããªã¯ã¨ã¹ãã¡ãã»ã¼ã¸ããªã¢ã¼ããµã¼ãã¼ã«éä¿¡ãããµã¼ãã¼ããã¬ã¹ãã³ã¹ãè¿ããã¾ãããã®ä¾ã§ã¯ããµã¼ãã¼ãã JSON ãã¡ã¤ã«ãåå¾ããããã®ãªã¯ã¨ã¹ããéä¿¡ãã¾ããåã®è¨äºã§ã XMLHttpRequest API ã使ç¨ã㦠HTTP ãªã¯ã¨ã¹ãã使ããã®ãè¦ãã¦ãã¾ããï¼ãã®è¨äºã§ã¯ fetch() API ã使ç¨ãã¾ãããã㯠XMLHttpRequest ã«ä»£ããç¾ä»£ã®ãããã¹ãã¼ã¹ã® API ã§ãã
ããããã©ã¦ã¶ã¼ã® JavaScript ã³ã³ã½ã¼ã«ã«ã³ãã¼ãã¦ãã ããã
const fetchPromise = fetch(
"https://mdn.github.io/learning-area/javascript/apis/fetching-data/can-store/products.json",
);
console.log(fetchPromise);
fetchPromise.then((response) => {
console.log(`ã¬ã¹ãã³ã¹ãåä¿¡: ${response.status}`);
});
console.log("ãªã¯ã¨ã¹ããéå§â¦");
ããã§è¡ã£ã¦ãããã¨ã¯æ¬¡ã®éãã§ãã
fetch()API ãå¼ã³åºãããã®è¿å¤ãfetchPromiseã¸ä»£å ¥ãã¾ãã- ãã®ç´å¾ã«ã夿°
fetchPromiseã«ãã°ãåºåãã¾ããããã¯Promise { <state>: "pending" }ãããªåºåã«ãªãã¯ãã§ããããã¯ãPromiseãªãã¸ã§ã¯ããããããã®ãªãã¸ã§ã¯ãã®stateã®å¤ã"pending"ã§ãããã¨ã示ãã¦ãã¾ãã"pending"ã®ç¶æ ã¯ãèªã¿åãå¦çãã¾ã é²è¡ä¸ã§ãããã¨ãæå³ãã¦ãã¾ãã - ãããã¹ã®
then()ã¡ã½ããã«ãã³ãã©ã¼é¢æ°ã渡ãã¦æ¸¡ãã¾ããèªã¿è¾¼ã¿å¦çã«æåããã¨ããããã¹ã¯ãã³ãã©ã¼ãå¼ã³åºããããµã¼ãã¼ã®ã¬ã¹ãã³ã¹ãæ ¼ç´ãããResponseãªãã¸ã§ã¯ããæ¸¡ããã¾ãã - ãªã¯ã¨ã¹ããéå§ãããã¨ãã¡ãã»ã¼ã¸ã¨ãã¦ãã°åºåãã¾ãã
åºåã®å ¨ä½åã¯ã次ã®ãããªãã®ã§ãã
Promise { <state>: "pending" }
ãªã¯ã¨ã¹ããéå§â¦
ã¬ã¹ãã³ã¹ãåä¿¡: 200
ãªã¯ã¨ã¹ããéå§â¦ ã¯ãã¬ã¹ãã³ã¹ãåãåãåã«ãã°ã«è¨é²ããããã¨ã«æ³¨æãã¦ãã ãããåæé¢æ°ã¨ã¯ç°ãªãã fetch() ã¯ãªã¯ã¨ã¹ããé²è¡ãã¦ããéã«å¤ãè¿ãã®ã§ãããã°ã©ã ãå¿çãç¶ãããã¨ãã§ãã¾ããã¬ã¹ãã³ã¹ã¯ 200 (OK) ã¹ãã¼ã¿ã¹ã³ã¼ã ã示ãããªã¯ã¨ã¹ãã«æåãããã¨ãæå³ãã¦ãã¾ãã
ãã®ä¾ã¯ãåã®è¨äºã® XMLHttpRequest ãªãã¸ã§ã¯ãã«ã¤ãã³ããã³ãã©ã¼ã追å ããä¾ã¨ããä¼¼ã¦ããã¨æãããã§ãããããã®ä»£ããã«ãè¿ããããããã¹ã® then() ã¡ã½ããã«ãã³ãã©ã¼ã渡ãã¦ãã¾ãã
ãããã¹ã®é£é
fetch() API ã§ã¯ã Response ãªãã¸ã§ã¯ããåå¾ããããå¥ã®é¢æ°ãå¼ã³åºãã¦ã¬ã¹ãã³ã¹ãã¼ã¿ãåå¾ããå¿
è¦ãããã¾ããä»åã¯ãã¬ã¹ãã³ã¹ãã¼ã¿ã JSON ã¨ãã¦åå¾ãããã®ã§ã Response ãªãã¸ã§ã¯ãã® json() ã¡ã½ãããå¼ã³åºããã¨ã«ãªãã¾ãã json() ãéåæã§ãããã¨ããããã¾ãããã¤ã¾ãããã㯠2 ã¤ã®é£ç¶ããéåæé¢æ°ãå¼ã³åºããªããã°ãªããªãã±ã¼ã¹ãªã®ã§ãã
ãããå®è¡ãã¦ã¿ã¾ãããã
const fetchPromise = fetch(
"https://mdn.github.io/learning-area/javascript/apis/fetching-data/can-store/products.json",
);
fetchPromise.then((response) => {
const jsonPromise = response.json();
jsonPromise.then((data) => {
console.log(data[0].name);
});
});
ãã®ä¾ã§ã¯ãååã¨åæ§ã« then() ãã³ãã©ã¼ã fetch() ãè¿ããããã¹ã«è¿½å ãã¦ãã¾ãããããä»åã¯ããã³ãã©ã¼ã¯ response.json() ãå¼ã³åºãããæ¬¡ã«æ°ãã then() ãã³ãã©ã¼ã response.json() ãè¿ããããã¹ã«æ¸¡ãã¦ãã¾ãã
ããã§ã "baked beans" ï¼products.json ã«æ²è¼ããã¦ããæåã®åååï¼ããã°åºåãããã¯ãã§ãã
ããããã¡ãã£ã¨å¾
ã£ã¦ãã ãããååã®è¨äºã§ãã³ã¼ã«ããã¯ã®ä¸ã§å¥ã®ã³ã¼ã«ããã¯ãå¼ã³åºãã¨ãã³ã¼ãã®å
¥ãåã¬ãã«ãã©ãã©ãæ·±ããªãã¨è¨ã£ãã®ãè¦ãã¦ãã¾ãããããã¦ããã®ãã³ã¼ã«ããã¯å°çããã³ã¼ãããããã«ãããã¦ããã¨è¨ãã¾ããããããã¨åãã§ then() ãå¼ã³åºãã ãã§ã¯ãªãã®ã§ããããï¼
ãã¡ããããã§ãããããããããã¹ã®ã¨ã¬ã¬ã³ããªç¹å¾´ã¯ãthen() èªèº«ããããã¹ãè¿ããããã«æ¸¡ããã颿°ã®çµæã§å®äºãããã¨ã§ããããã¯ã¤ã¾ããä¸è¨ã®ã³ã¼ãããã®ããã«æ¸ãæãããã¨ãã§ããï¼ããã¦ã確ãã«ãããã¹ãï¼ã¨ãããã¨ã§ãã
const fetchPromise = fetch(
"https://mdn.github.io/learning-area/javascript/apis/fetching-data/can-store/products.json",
);
fetchPromise
.then((response) => response.json())
.then((data) => {
console.log(data[0].name);
});
æåã® then() ã®ãã³ãã©ã¼ã®ä¸ã§ 2 ã¤ç®ã® then() ãå¼ã³åºã代ããã«ã json() ãè¿ããããã¹ãè¿ãããã®è¿å¤ã§ 2 ã¤ç®ã® then() ãå¼ã³åºãããã«ãããã¨ãã§ãã¾ããããã¯ãããã¹é£éã¨å¼ã°ããé£ç¶ããéåæé¢æ°å¼ã³åºããè¡ãéã«ãã¤ã³ãã³ããã©ãã©ãæ·±ããªã£ã¦ããã®ãé¿ãããã¨ãã§ãã¾ãã
次ã®ã¹ãããã«ç§»åããåã«ãããä¸ã¤è¿½å ããªããã°ãªããªããã¨ãããã¾ãããªã¯ã¨ã¹ããèªã¿è¾¼ãåã«ããµã¼ãã¼ããªã¯ã¨ã¹ããåãå ¥ããå¦çãããã¨ãã§ãããã©ããã調ã¹ãå¿ è¦ãããã¾ãããããè¡ãã«ã¯ãã¬ã¹ãã³ã¹ã®ã¹ãã¼ã¿ã¹ã³ã¼ãã調ã¹ã¦ãããã "OK" ã§ãªãå ´åã¯ã¨ã©ã¼ãçºçããã¾ãã
const fetchPromise = fetch(
"https://mdn.github.io/learning-area/javascript/apis/fetching-data/can-store/products.json",
);
fetchPromise
.then((response) => {
if (!response.ok) {
throw new Error(`HTTP error: ${response.status}`);
}
return response.json();
})
.then((data) => {
console.log(data[0].name);
});
ã¨ã©ã¼ã®ææ
ããã§æå¾ã®ãã¼ã¹ãã¨ã©ã¼ãã©ãå¦çãããããè¦ãã¦ãã¾ããã fetch() API ã¯æ§ã
ãªçç±ã§ã¨ã©ã¼ãçºçããããã¨ãããã¾ãï¼ä¾ãã°ããããã¯ã¼ã¯ã«æ¥ç¶ã§ããªããURL ãä½ããã®å½¢ã§ä¸æ£ã§ãããªã©ï¼ãã¾ãããµã¼ãã¼ãã¨ã©ã¼ãè¿ãã¨ãç§ãã¡èªèº«ããã®ã¨ã©ã¼ãå ±åãããã¨ã«ãªãã¾ãã
åã®è¨äºã§ããã¹ããããã³ã¼ã«ããã¯ã§ã¯ã¨ã©ã¼å¦çãã¨ã¦ãé£ãããªãããã¹ãã¬ãã«ãã¨ã«ã¨ã©ã¼ãå¦çããªããã°ãªããªããªããã¨ã確èªãã¾ããã
ã¨ã©ã¼å¦çã«å¯¾å¿ããããã«ã Promise ãªãã¸ã§ã¯ã㯠catch() ã¡ã½ãããæä¾ãã¦ãã¾ãããã㯠then() ã«ããä¼¼ã¦ãã¾ãããããå¼ã³åºãã¦ããã³ãã©ã¼é¢æ°ã渡ãã¾ãããã ããthen() ã«æ¸¡ããããã³ãã©ã¼ã¯éåæå¦çãæåããã¨ãã«å¼ã³åºãããã®ã«å¯¾ããcatch() ã«æ¸¡ããããã³ãã©ã¼ã¯éåæå¦çã失æããã¨ãã«å¼ã³åºããã¾ãã
ãããã¹é£éã®æå¾ã« catch() ã追å ããã¨ãéåæé¢æ°å¼ã³åºãã®ããããã«å¤±æããã¨ãã«å¼ã³åºãããããã«ãªãã¾ããã¤ã¾ããããå¦çãããã¤ãã®é£ç¶ããéåæé¢æ°å¼ã³åºãã¨ãã¦å®è£
ãããã¹ã¦ã®ã¨ã©ã¼ãå¦çããå ´æãä¸ã¤ã«ã¾ã¨ãã¦ãããã¨ãã§ãã¾ãã
ãã®ãã¼ã¸ã§ã³ã® fetch() ã³ã¼ãã試ãã¦ã¿ã¦ãã ããã catch() ã使ç¨ããã¨ã©ã¼ãã³ãã©ã¼ã追å ãããªã¯ã¨ã¹ãã失æããããã« URL ã夿´ãã¦ãã¾ãã
const fetchPromise = fetch(
"bad-scheme://mdn.github.io/learning-area/javascript/apis/fetching-data/can-store/products.json",
);
fetchPromise
.then((response) => {
if (!response.ok) {
throw new Error(`HTTP error: ${response.status}`);
}
return response.json();
})
.then((data) => {
console.log(data[0].name);
})
.catch((error) => {
console.error(`Could not get products: ${error}`);
});
ãã®ãã¼ã¸ã§ã³ãå®è¡ãã¦ã¿ã¦ãã ããã catch() ãã³ãã©ã¼ã«ãã£ã¦è¨é²ãããã¨ã©ã¼ã表示ãããã¯ãã§ãã
ãããã¹ã®ç¨èª
ãããã¹ã«ã¯ãããªãç¹æ®ãªç¨èªã使ããã¦ããã®ã§ãããã«ã¤ãã¦çè§£ãã¦ããã¨ããã§ãããã
ã¾ãããããã¹ã¯ 3 ã¤ã®ç¶æ ã®ããããã«ãªãã¾ãã
- å¾
æ© (pending): ãããã¹ã使ããããããé¢é£ããéåæé¢æ°ãã¾ã æåã失æããã¦ããªãç¶æ
ã§ããããã¯ããããã¹ã
fetch()ãå¼ã³åºãã¦è¿ãããã¨ãã®ç¶æ ã§ããããªã¯ã¨ã¹ãã¯ã¾ã å®è¡ããã¦ãã¾ãã - å±¥è¡ (fulfilled): éåæé¢æ°ãæåãã¦ãã¾ãããããã¹ãå±¥è¡ãããã¨ããã®
then()ãã³ãã©ã¼ãå¼ã³åºããã¾ãã - æå¦ (rejected): éåæé¢æ°ã失æãã¦ãã¾ãããããã¹ãæå¦ãããã¨ããã®
catch()ãã³ãã©ã¼ãå¼ã³åºããã¾ãã
ããã§ãããæåãããã失æããããä½ãæå³ãã¦ãããã¯ãå½è©² API ã«ããã¨ãããã¨ã«æ³¨æãã¦ãã ãããä¾ãã°ã fetch() ã¯ãµã¼ãã¼ã 404 Not Found ã¨ãã£ãã¨ã©ã¼ãè¿ãã¦ããã°ãªã¯ã¨ã¹ãã«æåããã¨å¤æãã¾ããããããã¯ã¼ã¯ã®ã¨ã©ã¼ã§ãªã¯ã¨ã¹ããéããªãã£ãå ´åã¯æåããªãã¨ãã¾ãã
æ±ºå® (settled) ã¨ããç¨èªã使ããã¨ãããã¾ããããã¯å±¥è¡ã¨æå¦ã®ä¸¡æ¹ã表ãã¾ãã
ãããã¹ã解決 (resolved) ããã¨ããã¨ã決å®ãããã¨ãããã¾ãã¯ä»ã®ãããã¹ã®ç¶æ ã«å¾ããã¨ã§ãããã¯ã¤ã³ããããå ´åã表ãã¾ãã
Let's talk about how to talk about promises ã®è¨äºã§ã¯ããã®ç¨èªã®è©³ç´°ã«ã¤ãã¦ç´ æ´ããã解説ãæä¾ãã¦ãã¾ãã
è¤æ°ã®ãããã¹ã®çµã¿åãã
ãããã¹ãã§ã¼ã³ã¯ãå¦çãããã¤ãã®éåæé¢æ°ããæ§æãããæ¬¡ã®é¢æ°ãéå§ããåã«ããããã®é¢æ°ãå®äºããå¿
è¦ãããå ´åã«å¿
è¦ã¨ãªããã®ã§ããããããä»ã«ãéåæé¢æ°ã®å¼ã³åºããçµã¿åãããå¿
è¦ãããå ´åãããã Promise API ã¯ãã®ããã®ãã«ãã¼ãããã¤ãæä¾ãã¦ãã¾ãã
æã«ã¯ããã¹ã¦ã®ãããã¹ãå±¥è¡ãããå¿
è¦ãããããã©ãããããã¯ãäºãã«ä¾åãã¦ããªãå ´åãããã¾ãããã®ãããªå ´åããããããã¹ã¦ãåæã«éå§ãããã¹ã¦å±¥è¡ãããã¨ãã«éç¥ãåããæ¹ããã£ã¨å¹ççã§ããããã§å¿
è¦ãªã®ã¯ Promise.all() ã¡ã½ããã§ããããã¯ãããã¹ã®é
åãåãåããåä¸ã®ãããã¹ãè¿ãã¾ãã
Promise.all() ãè¿ããããã¹ã¯æ¬¡ã®ãããªãã®ã§ãã
- é
åã®ä¸ã®ãã¹ã¦ã®ãããã¹ãæºããããã¨ãã¯ãããã¦æºããããã¨ãã«å®è¡ããã¾ãããã®å ´åããã¹ã¦ã®ã¬ã¹ãã³ã¹ã®é
åã§
then()ãã³ãã©ã¼ããall()ã«æ¸¡ãããã®ã¨åãé çªã§å¼ã³åºããã¾ãã - é
åå
ã®ãããã¹ã®ãã¡ä½ãããæå¦ãããã¨ãã¯ãæå¦ããããããã¹ãè¿ãã¾ãããã®å ´åã
catch()ãã³ãã©ã¼ããæå¦ããããããã¹ãçºçããã¨ã©ã¼ã¨å ±ã«å¼ã³åºããã¾ãã
ä¾ã示ãã¾ãã
const fetchPromise1 = fetch(
"https://mdn.github.io/learning-area/javascript/apis/fetching-data/can-store/products.json",
);
const fetchPromise2 = fetch(
"https://mdn.github.io/learning-area/javascript/apis/fetching-data/can-store/not-found",
);
const fetchPromise3 = fetch(
"https://mdn.github.io/learning-area/javascript/oojs/json/superheroes.json",
);
Promise.all([fetchPromise1, fetchPromise2, fetchPromise3])
.then((responses) => {
for (const response of responses) {
console.log(`${response.url}: ${response.status}`);
}
})
.catch((error) => {
console.error(`Failed to fetch: ${error}`);
});
ããã§ã¯ã 3 ã¤ã®ç°ãªã URL ã«å¯¾ã㦠3 ã¤ã® fetch() ãªã¯ã¨ã¹ããè¡ã£ã¦ãã¾ãããããããããã¹ã¦æåããããããããã®ã¬ã¹ãã³ã¹ã¹ãã¼ã¿ã¹ããã°åºåãã¾ããããã©ããã失æãããããã®å¤±æããã°åºåãã¾ãã
ç§ãã¡ãæå®ãã URL ã§ã¯ããã¹ã¦ã®ãªã¯ã¨ã¹ããæåããã¯ãã§ãããã ãã2 ã¤ç®ã®ãªã¯ã¨ã¹ãã§ã¯ããªã¯ã¨ã¹ããããã¡ã¤ã«ãåå¨ããªãããããµã¼ãã¼ã¯ 200 (OK) ã®ä»£ããã« 404 (Not Found) ãè¿ãã¾ãããããã£ã¦ãåºåã¯æ¬¡ã®ããã«ãªãã¯ãã§ãã
https://mdn.github.io/learning-area/javascript/apis/fetching-data/can-store/products.json: 200 https://mdn.github.io/learning-area/javascript/apis/fetching-data/can-store/not-found: 404 https://mdn.github.io/learning-area/javascript/oojs/json/superheroes.json: 200
åãã³ã¼ããééã£ã形㮠URL ã§è©¦ãã¨ã次ã®ããã«ãªãã¾ãã
const fetchPromise1 = fetch(
"https://mdn.github.io/learning-area/javascript/apis/fetching-data/can-store/products.json",
);
const fetchPromise2 = fetch(
"https://mdn.github.io/learning-area/javascript/apis/fetching-data/can-store/not-found",
);
const fetchPromise3 = fetch(
"bad-scheme://mdn.github.io/learning-area/javascript/oojs/json/superheroes.json",
);
Promise.all([fetchPromise1, fetchPromise2, fetchPromise3])
.then((responses) => {
for (const response of responses) {
console.log(`${response.url}: ${response.status}`);
}
})
.catch((error) => {
console.error(`Failed to fetch: ${error}`);
});
ããã¦ãcatch() ãã³ãã©ã¼ãå®è¡ãããæ¬¡ã®ãããªè¡¨ç¤ºã«ãªããã¨ãæå¾
ã§ãã¾ãã
Failed to fetch: TypeError: Failed to fetch
æã«ã¯ãè¨å®ããããããã¹ã®ãã¡ã©ãããå±¥è¡ãããå¿
è¦ããããã©ããå±¥è¡ããããã¯æ°ã«ããªããã¨ãããããããã¾ããããã®ãããªå ´å㯠Promise.any() ãæå®ãã¾ãããã㯠Promise.all() ã¨ä¼¼ã¦ãã¾ããããããã¹ã®é
åã®ãããããå±¥è¡ãããã¨ããã«å±¥è¡ããããã¹ã¦ãæå¦ãããã¨æå¦ãããç¹ãç°ãªãã¾ãã
const fetchPromise1 = fetch(
"https://mdn.github.io/learning-area/javascript/apis/fetching-data/can-store/products.json",
);
const fetchPromise2 = fetch(
"https://mdn.github.io/learning-area/javascript/apis/fetching-data/can-store/not-found",
);
const fetchPromise3 = fetch(
"https://mdn.github.io/learning-area/javascript/oojs/json/superheroes.json",
);
Promise.any([fetchPromise1, fetchPromise2, fetchPromise3])
.then((response) => {
console.log(`${response.url}: ${response.status}`);
})
.catch((error) => {
console.error(`Failed to fetch: ${error}`);
});
ãã®å ´åãã©ã®èªã¿è¾¼ã¿è¦æ±ãæåã«å®äºããã®ããäºæ¸¬ãããã¨ã¯ã§ããªããã¨ã«æ³¨æãã¦ãã ããã
ãããã¯ãè¤æ°ã®ãããã¹ãçµåããããã®ç¹å¥ãª Promise 颿°ã®ãã¡ã® 2 ã¤ã«éãã¾ãããæ®ãã®é¢æ°ã«ã¤ãã¦ã¯ Promise ã®ãªãã¡ã¬ã³ã¹ããã¥ã¡ã³ããåç
§ãã¦ãã ããã
async 㨠await
async ãã¼ã¯ã¼ãã«ãããéåæãããã¹ã³ã¼ããããã·ã³ãã«ã«åä½ããããã¨ãã§ãã¾ãã颿°ã®éå§æã« async ã追å ããã¨ããã®é¢æ°ã¯éåæé¢æ°ã«ãªãã¾ãã
async function myFunction() {
// This is an async function
}
éåæé¢æ°ã®å
é¨ã§ã¯ããããã¹ãè¿ã颿°ãå¼ã³åºãåã« await ãã¼ã¯ã¼ãã使ç¨ãããã¨ãã§ãã¾ããããã¯ããããã¹ã決å®ããã¾ã§ãã®ç¹ã§ã³ã¼ããå¾
ããããã®æç¹ã§ãããã¹ã®å±¥è¡ãããå¤ãè¿å¤ã¨ãã¦æ±ãããããæå¦ãããå¤ã§ä¾å¤ãçºçããããã«ãã¾ãã
ããã«ãããéåæé¢æ°ã使ç¨ããªããããä¸è¦ããã¨åæã³ã¼ãã®ããã«è¦ããã³ã¼ããæ¸ããã¨ãã§ãã¾ããä¾ãã°ã fetch ã®ä¾ãæ¸ãç´ãã®ã«ä½¿ç¨ãããã¨ãã§ãã¾ãã
async function fetchProducts() {
try {
// ãã®è¡ã®å¾ããã®é¢æ°ã¯ `fetch()` å¼ã³åºããæ±ºå®ãããã®ãå¾
ã¡ã¾ãã
// `fetch()` å¼ã³åºã㯠Response ãè¿ãããã¨ã©ã¼ãçºçããã¾ãã
const response = await fetch(
"https://mdn.github.io/learning-area/javascript/apis/fetching-data/can-store/products.json",
);
if (!response.ok) {
throw new Error(`HTTP error: ${response.status}`);
}
// ãã®è¡ã®å¾ããã®é¢æ°ã¯ `response.json()` å¼ã³åºããæ±ºå®ãããã®ãå¾
ã¡ã¾ãã
// `response.json()` å¼ã³åºãã¯ãè§£éããã JSON ãªãã¸ã§ã¯ããè¿ãããã¨ã©ã¼ãçºçããããã®ã©ã¡ããã§ãã
const data = await response.json();
console.log(data[0].name);
} catch (error) {
console.error(`Could not get products: ${error}`);
}
}
fetchProducts();
ããã§ã¯ã await fetch() ãå¼ã³åºãã¦ãã¾ãããå¼ã³åºãå
㯠Promise ãåå¾ãã代ããã«ã fetch() ãåæé¢æ°ã§ãããã®ããã«å®å
¨ã« Response ãªãã¸ã§ã¯ããåå¾ãã¾ãã
ã¨ã©ã¼å¦çã®ããã« try...catch ãããã¯ã使ç¨ãããã¨ãã§ããåæé¢æ°ã¨å
¨ãåãããã«å¦çã§ãã¾ãã
ããããéåæé¢æ°ã¯å¸¸ã«ãããã¹ãè¿ãã®ã§ã以ä¸ã®ãããªãã¨ã¯ã§ãã¾ããã
async function fetchProducts() {
try {
const response = await fetch(
"https://mdn.github.io/learning-area/javascript/apis/fetching-data/can-store/products.json",
);
if (!response.ok) {
throw new Error(`HTTP error: ${response.status}`);
}
const data = await response.json();
return data;
} catch (error) {
console.error(`Could not get products: ${error}`);
}
}
const promise = fetchProducts();
console.log(promise[0].name); // "promise" 㯠Promise ãªãã¸ã§ã¯ããªã®ã§ãããã¯åä½ãã¾ããã
ãã®ä»£ãããæ¬¡ã®ããã«ããå¿ è¦ãããã¾ãã
async function fetchProducts() {
const response = await fetch(
"https://mdn.github.io/learning-area/javascript/apis/fetching-data/can-store/products.json",
);
if (!response.ok) {
throw new Error(`HTTP error: ${response.status}`);
}
const data = await response.json();
return data;
}
const promise = fetchProducts();
promise
.then((data) => {
console.log(data[0].name);
})
.catch((error) => {
console.error(`Could not get products: ${error}`);
});
ããã§ã¯ãtry...catch ãè¿ããããããã¹ã® catch ãã³ãã©ã¼ã«æ»ãã¾ãããããã«ããã fetchProducts 颿°ã®å
é¨ã§ã¨ã©ã¼ãçºçã㦠data ã undefined ã«ãªã£ãå ´åã§ãã then ãã³ãã©ã¼ã§å¦çããå¿
è¦ããªããªãã¾ãããããã¹ãã§ã¼ã³ã®æå¾ã®ã¹ãããã¨ãã¦ã¨ã©ã¼ãå¦çãã¾ãã
ã¾ããJavaScriptã¢ã¸ã¥ã¼ã«ã®ä¸ã«ã³ã¼ãããªãéãã await 㯠async 颿°ã®ä¸ã§ãã使ç¨ã§ããªããã¨ã«æ³¨æãã¦ãã ãããã¤ã¾ããé常ã®ã¹ã¯ãªããã§ã¯ãã®æ©è½ã¯ä½¿ãã¾ããã
try {
// await ãéåæé¢æ°ã®å¤ã§ä½¿ç¨ãããã¨ã¯ãã¢ã¸ã¥ã¼ã«ã®ä¸ã§ãã許ããã¾ããã
const response = await fetch(
"https://mdn.github.io/learning-area/javascript/apis/fetching-data/can-store/products.json",
);
if (!response.ok) {
throw new Error(`HTTP error: ${response.status}`);
}
const data = await response.json();
console.log(data[0].name);
} catch (error) {
console.error(`Could not get products: ${error}`);
throw error;
}
ããããããããã¹é£éã使ç¨ãããããªå ´é¢ã§ async 颿°ããã使ç¨ããã¨æãã¾ããããã®é¢æ°ã¯ãããã¹ãããç´æçã«åä½ããããã¨ãã§ãã¾ãã
ãããã¹ãã§ã¼ã³ã¨åãããã«ã await ã¯éåæãªå¦çãé£ç¶ãã¦å®è¡ããããã¨ãè¦ãã¦ããã¦ãã ãããããã¯ãæ¬¡ã®æ¼ç®åã®çµæãæå¾ã®æ¼ç®åã®çµæã«ä¾åããå ´åã«å¿
è¦ã§ãããããã§ãªãå ´å㯠Promise.all() ã®ãããªãã®ãå©ç¨ããæ¹ãããé«ãããã©ã¼ãã³ã¹ãå¾ããã¾ãã
ã¾ã¨ã
ãããã¹ã¯ç¾ä»£ã® JavaScript ã§éåæããã°ã©ãã³ã°ãè¡ãããã®åºç¤ã¨ãªããã®ã§ãããããã¹ã¯æ·±ãå
¥ãåã«ãªã£ãã³ã¼ã«ããã¯ãªãã§ä¸é£ã®éåæå¦çãç°¡åã«çºçãããåæç㪠try...catch æã«ä¼¼ãã¨ã©ã¼å¦çã®ã¹ã¿ã¤ã«ã«å¯¾å¿ãã¦ãã¾ãã
async 㨠await ãã¼ã¯ã¼ãã¯ãä¸é£ã®é£ç¶ããéåæé¢æ°å¼ã³åºãããå¦çãæ§ç¯ãããã¨ã容æã«ããæç¤ºçãªãããã¹ãã§ã¼ã³ã使ããå¿
è¦æ§ãé¿ããåæã³ã¼ãã¨åãããã«è¦ããã³ã¼ããæ¸ããã¨ãå¯è½ã«ãã¾ãã
ãããã¹ã¯ç¾ä»£ã®ãã¹ã¦ã®ãã©ã¦ã¶ã¼ã®ææ°çã§åä½ãã¾ãããããã¹ã®å¯¾å¿ãåé¡ã«ãªãã®ã¯ã Opera Mini 㨠IE11 ããã³ãã以åã®ãã¼ã¸ã§ã³ã ãã§ãã
ãã®è¨äºã§ã¯ãããã¹ã®ãã¹ã¦ã®æ©è½ã«ã¯è§¦ãããæãè峿·±ãæç¨ãªãã®ã ããåãä¸ãã¾ããããããã¹ã«ã¤ãã¦å¦ã³å§ããã¨ããã£ã¨å¤ãã®æ©è½ããã¯ããã¯ã«åºä¼ãã§ãããã
WebRTCãã¦ã§ããªã¼ãã£ãª APIãã¡ãã£ã¢ãã£ããã£ã¨ã¹ããªã¼ã ãªã©ãªã©ãå¤ãã®ç¾ä»£çãªã¦ã§ã API ã¯ããããã¹ãã¼ã¹ã«ãªã£ã¦ãã¾ãã
é¢é£æ å ±
Promise()- ãããã¹ã®ä½¿ç¨
- We have a problem with promises (Nolan Lawson)ï¼è±èªï¼
- Let's talk about how to talk about promisesï¼è±èªï¼