我淹没在承诺中,试图从我的GitHub Repos中得到一个我认为很简单的数据。
我所要做的就是找到我在GitHub上的每个存储库中语言使用的百分比。我已经让它工作了,但我很有信心,如果我知道我在做什么,我离正确地或简洁地做它还有很长的路要走。我真的很感激任何关于如何正确地做这件事的反馈,以及可能使用更多最新方法的重构。
这是我到目前为止的代码(可以工作)。忽略我现在输出它的方式,这只是为了概念的证明。
const username = '<GH_USERNAME>' //your username here
const apiUrl = `https://api.github.com/users/${username}/repos`;
fetch(apiUrl)
.then((response) => {
if (response.ok) {
return response.json();
}
})
.then((data) => {
languagePromises = [];
for (let i in data) {
let repo = data[i];
if (!repo['fork'] && repo['language']) {
// console.log(repo['name'], repo['language']);
let langs = repo['languages_url'];
languagePromises.push(fetch(langs))
}
}
Promise.all(languagePromises)
.then((responses) => {
let languages = [];
for (let r of responses) {
if (r.ok) languages.push(r.json())
}
Promise.all(languages)
.then((resolved) => {
let languageTotals = {};
for (langData of resolved) {
for (lang in langData) {
if (!languageTotals[lang]) {
languageTotals[lang] = 0
}
languageTotals[lang] += (langData[lang]);
}
}
// console.log(languageTotals);
let sum = 0;
for (let l in languageTotals) { sum += languageTotals[l] }
for (let l in languageTotals) {
let p = (languageTotals[l] / sum * 100).toFixed(0) + '%';
document.write(l,' ', p, '<br>');
}
});
});
})
.catch((e) => {
console.error('Error:', e);
});
就像是说。它的工作,但我基本上是在寻找如何正确地做这件事的建议。
2条答案
按热度按时间cfh9epnr1#
goqiplq22#
下面是一个清理/减少大量代码的示例: