【发布时间】:2016-09-15 19:29:36
【问题描述】:
我正在尝试编写一个使用 GitHub API 的脚本。我有一个接受用户名列表的函数。对于每个用户名,都会调用 API 以使该用户为存储库加星标。对于每个用户为 repo 加星标,我想捕获 repo 的名称和星数,最终我想对这些数据做更多的工作。
我正在尝试仅使用本机承诺来实现这一点,并避免使用 Q、Bluebird 等。这就是我所拥有的不起作用的东西。
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);
});
};
基本上,当我在 .then() 方法中记录数组时,我希望看到所有的 {name: stargazers_count} 数据。但是每次都会输出一个空数组。有人可以向我解释一下我在这里缺少什么吗?
【问题讨论】:
-
您在一个空数组上调用了 Promise.all。有点重复:stackoverflow.com/questions/14220321/…
-
“它必须是可迭代的??” - 你为什么这么认为?
标签: javascript node.js loops promise