Ich versuche ein Skript zu schreiben, das die GitHub API verwendet. Ich habe eine Funktion, die eine Liste von Benutzernamen akzeptiert. Für jeden Benutzernamen wird ein Aufruf an die API vorgenommen, um die markierten Repos der Nutzer zu erhalten. Für jeden User-Repo möchte ich den Namen des Repos und die Anzahl der Sterne notieren, schließlich möchte ich mit diesen Daten mehr arbeiten.Promise.all() verhält sich unerwartet, wo ist mein Unverständnis?
Ich versuche, dies mit nur nativen Versprechen zu implementieren und vermeiden Q, Bluebird usw. Hier ist, was ich habe, die nicht funktioniert.
function getNameAndStarInfo(repo){
return new Promise(function(resolve, reject){
//i'd like this to return an object but it has to be an iterable??
resolve([{[repo.full_name] : repo.stargazers_count}]);
});
};
function getStarredRepos(usernames){
var promises =[];
for (var user in usernames){
//build the header for API request
var name = usernames[user];
var url = 'https://api.github.com/users/' + name + '/starred';
var header = {url: url, headers: {'User-Agent': 'username', 'Authorization': 'token blahblabhlabh'}, json: true };
//for the current user make a request and get their starred repos
request(header, function(err, res, usersStarredRepos){
for (var repo in usersStarredRepos){
promises.push(getNameAndStarInfo(usersStarredRepos[repo]));
};
});
};
Promise.all(promises)
.then(function(promises){
//dont need to log, would like to do stuff with this data later
console.log(promises);
});
};
Im Wesentlichen Ich erwarte ein all den {name: stargazers_count} um zu sehen, Daten, wenn ich das Array anmelden, nachdem in der .then() -Methode. Ein leeres Array wird jedoch jedes Mal ausgegeben. Kann mir jemand erklären, was ich hier vermisse?
Sie versprechen. alles auf einem leeren Array. Etwas von einem Duplikat von: http://stackoverflow.com/questions/14220321/how-do-i-return-the-response-from-an-asynchronous-call –
"* es muss ein iterable sein ?? *" - warum denkst du das? – Bergi