Сначала я бы порекомендовал вам также получить hasNextPage
со страницы информации
чтобы вы могли знать, когда вы достигли конца.
После этого вам просто нужно лучше структурировать свой код
изменить search_query на функцию, подобную этой:
function searchQuery(after = null) {
return {
"query": `query($name: String!, $after: String){
search(query:$name, type: USER, first: 2, after: $after){
userCount
pageInfo {
hasNextPage
endCursor
}
nodes{
...on User{
id
bio
html_url:url
}
}
}
}`,
"variable": {
"name": "somename",
"after": after
}
};
};
сейчас searchQuery
возвращает запрос на основе пункта after
так что вам нужно создать логический "while"
, который закончится, когда ответ hasNextPage
будет ложным:
function queryServer(after) {
unirest.post(endpoint)
.headers({
"Content-Type": "text/html",
"Authorization": "bearer " + token,
'user-agent': 'node.js'
})
.send(JSON.stringify(searchQuery(after))) //creating requests
.end(function(response, request) {
// do stuff with the result
console.log(response.body.data.search.pageInfo.endCursor);
// if there are more pages get them
if (response.body.data.search.pageInfo.hasNextPage) {
return queryServer(response.body.data.search.pageInfo.endCursor);
}
});
}
queryServer(null);
Примечание: я не тестировал код, и IMO код мог бы быть намного чище с другим пакетом запросов, например axios , который поддерживает promises
, и тогда вы могли бы даже включить async/await
, так было бы намного проще использовать и понимать
вместо той ужасной рекурсии, которая нужна сейчас ...