我在我正在研究的nodejs应用程序中遇到了一个问题,似乎无法找到解决方案。
我正在使用GitHub API:
步骤3是出现问题的地方。
我正在使用两个异步函数getReposForUser()
和getIssuesForRepo()
,其行为如下
async function getReposForUser(username) {
// Fetch user repos from GitHub
var result = await github.repos.getForUser({
username: username,
per_page: 100
})
// Grab issues for each repo
repos = repos.map(repo => {
return getIssuesForRepo(repo);
});
// console.log(repos);
}
async function getIssuesForRepo(repo) {
/*
if there are issues available, fetch them and attach
them to the repo object (under a property named issues).
otherwise, assign the issues property a value of null
*/
if (repo.has_issues) {
let issues = await github.issues.getForRepo({
owner: repo.owner.login,
repo: repo.name,
state: 'open'
});
repo.issues = issues;
return repo;
} else {
return repo.issues = null;
}
}
当我在console.log(repos)
运行后尝试getIssuesForRepo()
时,我得到一组Promises。经过一些研究后,很明显async / await函数返回Promises。好的,得到了。我的问题是,我可以做些什么来创建具有这些承诺的已解决值的新对象数组?基本上,我想将为每个repo检索到的问题数组附加到其各自的repo 。
提前感谢任何可能提供帮助的人。
此外,为什么在getReposForUser()
运行后getIssuesForRepo()
内部会有效?
let firsRepo = await getIssuesForRepo(repos[0]);
console.log(firsRepo);
在这种情况下,我实际上看到了对象,而不是未解决的承诺......
答案 0 :(得分:4)
承诺数组上的我可以做些什么来创建具有这些承诺的已解决值的新对象数组?
await
Promise.all
:
repos = await Promise.all(repos.map(repo => {
return getIssuesForRepo(repo);
}));
附注:您的map
回调可以 getIssuesForRepo
:
repos = await Promise.all(repos.map(getIssuesForRepo));
map
使用条目,索引和映射的数组调用其回调。由于您的getIssuesforRepo
仅使用其第一个参数,因此将忽略额外的两个参数。