Я звоню в API-интерфейс bitbucket, чтобы получить все файлы, находящиеся в репо.Я дошел до того, что смог получить список всех папок в репо и сделать первый API-вызов для всех корневых папок в репо параллельно и получить список первых 1000 файлов для всех папок.
Но проблема в том, что API-интерфейс bitbucket может выдавать мне только 1000 файлов в папке за раз.
Мне нужно добавить параметр запроса & start = nextPageStart и повторить вызов, пока он не станет нулевым и значение isLastPage не станет истинным для API.Как я могу добиться этого с помощью приведенного ниже кода ??
Я получаю nextPageStart от первого вызова API.См. Ответ API ниже.
Ниже приведен код, который у меня имеется.
Любая помощь или руководство приветствуются.
Ответ от отдельных API, который называетсядля каждой папки.
{
"values": [
"/src/js/abc.js",
"/src/js/efg.js",
"/src/js/ffg.js",
...
],
"size": 1000,
"isLastPage": false,
"start": 0,
"limit": 1000,
"nextPageStart": 1000
}
функция, в которой я выполнял асинхронные вызовы для получения списка файлов
export function getFilesList() {
const foldersURL: any[] = [];
getFoldersFromRepo().then((response) => {
const values = response.values;
values.forEach((value: any) => {
//creating API URL for each folder in the repo
const URL = 'https://bitbucket.abc.com/stash/rest/api/latest/projects/'
+ value.project.key + '/repos/' + value.slug + '/files?limit=1000';
foldersURL.push(URL);
});
return foldersURL;
}).then((res) => {
// console.log('Calling all the URLS in parallel');
async.map(res, (link, callback) => {
const options = {
url: link,
auth: {
password: 'password',
username: 'username',
},
};
request(options, (error, response, body) => {
// TODO: How do I make the get call again so that i can paginate and append the response to the body till the last page.
callback(error, body);
});
}, (err, results) => {
console.log('In err, results function');
if (err) {
return console.log(err);
}
//Consolidated results after all API calls.
console.log('results', results);
});
})
.catch((error) => error);
}