【发布时间】:2020-03-19 10:19:14
【问题描述】:
我正在从 github 存储库中获取信息。我想获取该仓库中的拉取请求列表,获取与每个拉取请求关联的提交列表,然后对于每个提交,我想获取诸如提交的作者、与每个提交关联的文件数和对每个文件进行的添加和删除次数。我正在使用 axios 和 github API 来完成此任务。我知道如何使用 API,但 Promise 和异步函数使我无法完成任务。我有以下代码:
const axios = require('axios');
var mapOfInformationObjects = new Map();
var listOfCommits = [];
var listOfSHAs = [];
var gitApiPrefix = link I'll use to start fetching data;
var listOfPullRequestDataObjects = [];
var listOfPullRequestNumbers = [];
var mapOfPullNumberToCommits = new Map();
function getAllPullRequests(gitPullRequestApiLink) {
return new Promise((resolve, reject) => {
axios.get(gitPullRequestApiLink).then((response) =>{
listOfPullRequestDataObjects = response['data'];
var k;
for (k = 0; k < listOfPullRequestDataObjects.length; k++){
listOfPullRequestNumbers.push(listOfPullRequestDataObjects[k]['number']);
}
resolve(listOfPullRequestNumbers);
}).catch((error) => {
reject(error);
})
})
}
function getCommitsForEachPullRequestNumber(listOfPRNumbers) {
var j;
for (j = 0; j < listOfPRNumbers.length; j++) {
currPromise = new Promise((resolve, reject) => {
currentGitApiLink = gitApiPrefix + listOfPRNumbers[j] + "/commits";
axios.get(currentGitApiLink).then((response) => {
mapOfPullNumberToCommits.set(listOfPRNumbers[j], response['data']);
resolve("Done with Pull Request Number: " + listOfPRNumbers[j]);
}).catch((error) => {
reject(error);
})
})
}
}
function getListOfCommits(gitCommitApiLink){
return new Promise((resolve, reject) => {
axios.get(gitCommitApiLink).then((response) => {
resolve(response);
}).catch((error) => {
reject(error);
})
})
}
到目前为止,我做了一些我想按顺序调用的函数。 首先我想调用 getAllPullRequestNumbers(someLink) 然后我想打电话给 getCommitsForEachPullRequestNumber(listofprnumbers) 然后getListOfCommits(anotherLink)
所以它看起来像
getAllPullRequestNumbers(someLink)
getCommitsForEachPullRequestNumber(listofprnumbers)
getListOfCommits(anotherlink)
但是出现了两个问题: 1)我不确定这是否是您调用函数的方式,以便序列中的第一个函数在另一个函数之前完成。 2) 因为我不熟悉 Javascript,所以我不确定,尤其是 getCommitsForEachPullRequestNumber 函数,因为您运行一个循环并在循环的每次迭代中调用 axios.get(),如果这是您在其中处理承诺的方式功能。
这就是您完成这两项任务的方式吗?任何帮助深表感谢。谢谢!
【问题讨论】:
-
你能提供一个你想使用的api链接吗?
标签: javascript asynchronous promise axios