ä» GitHub fetch ç¨æ·ä¿¡æ¯
å建ä¸ä¸ªå¼æ¥å½æ° getUsers(names)ï¼è¯¥å½æ°æ¥å GitHub ç»å½åæ°ç»ä½ä¸ºè¾å
¥ï¼æ¥è¯¢ GitHub 以è·åæå
³è¿äºç¨æ·çä¿¡æ¯ï¼å¹¶è¿å GitHub ç¨æ·æ°ç»ã
带æç»å® USERNAME çç¨æ·ä¿¡æ¯ç GitHub ç½åæ¯ï¼https://api.github.com/users/USERNAMEã
æ²ç®±ä¸æä¸ä¸ªæµè¯ç¨ä¾ã
éè¦çç»èï¼
- 对æ¯ä¸ä¸ªç¨æ·é½åºè¯¥æä¸ä¸ª
fetch请æ±ã - 请æ±ä¸åºè¯¥ç¸äºçå¾ ã以便è½å¤å°½å¿«è·åå°æ°æ®ã
- 妿任ä½ä¸ä¸ªè¯·æ±å¤±è´¥äºï¼æè
没æè¿ä¸ªç¨æ·ï¼å彿°åºè¯¥è¿å
nullå°ç»ææ°ç»ä¸ã
è¦è·åä¸ä¸ªç¨æ·ï¼æä»¬éè¦ï¼fetch('https://api.github.com/users/USERNAME').
妿ååºçç¶æç æ¯ 200ï¼åè°ç¨ .json() æ¥è¯»å JS 对象ã
å¦åï¼å¦æ fetch å¤±è´¥ï¼æè
ååºçç¶æç 䏿¯ 200ï¼æä»¬åªéè¦åç»ææ°ç»è¿å null å³å¯ã
代ç å¦ä¸ï¼
async function getUsers(names) {
let jobs = [];
for(let name of names) {
let job = fetch(`https://api.github.com/users/${name}`).then(
successResponse => {
if (successResponse.status != 200) {
return null;
} else {
return successResponse.json();
}
},
failResponse => {
return null;
}
);
jobs.push(job);
}
let results = await Promise.all(jobs);
return results;
}
请注æï¼.then è°ç¨ç´§è·å¨ fetch åé¢ï¼è¿æ ·ï¼å½æä»¬æ¶å°ååºæ¶ï¼å®ä¸ä¼çå¾
å
¶ä»ç fetchï¼èæ¯ç«å³å¼å§è¯»å .json()ã
妿æä»¬ä½¿ç¨ await Promise.all(names.map(name => fetch(...)))ï¼å¹¶å¨ results ä¸è°ç¨ .json() æ¹æ³ï¼é£ä¹å®å°ä¼çå°ææ fetch é½è·åå°ååºæ°æ®æå¼å§è§£æãéè¿å° .json() ç´æ¥æ·»å å°æ¯ä¸ª fetch ä¸ï¼æä»¬å°±è½ç¡®ä¿æ¯ä¸ª fetch 卿¶å°ååºæ¶é½ä¼ç«å³å¼å§ä»¥ JSON æ ¼å¼è¯»åæ°æ®ï¼èä¸ä¼å½¼æ¤çå¾
ã
è¿ä¸ªä¾å表æï¼å³ä½¿æä»¬ä¸»è¦ä½¿ç¨ async/awaitï¼ä½çº§å«ç Promise API ä»ç¶å¾æç¨ã