0
具体来说,给定一个数据列表,我希望遍历该列表并为之前的所有数据元素执行一次提取操作。正如所写的那样,代码立即在整个列表中迭代,同时启动所有操作。然后,即使提取操作仍在运行,那么在数据可能已经被处理之前,我仍然会运行该调用。如何在Promises循环之后运行回调?
我读了一些关于将所有Promises
放在一个数组中,然后将该数组传递给Promise.all()调用,随后是一个能够按预期方式访问所有已处理数据的函数,但我不是确定在这种情况下究竟该怎么做,因为我在这个for循环中嵌套了Promises
。
for(var i in repoData) {
var repoName = repoData[i].name;
var repoUrl = repoData[i].url;
(function(name, url) {
Promise.all([fetch(`https://api.github.com/repos/${username}/${repoData[i].name}/commits`),
fetch(`https://api.github.com/repos/${username}/${repoData[i].name}/pulls`)])
.then(function(results) {
Promise.all([results[0].json(), results[1].json()])
.then(function(json) {
//console.log(json[0]);
var commits = json[0];
var pulls = json[1];
var repo = {};
repo.name = name;
repo.url = url;
repo.commitCount = commits.length;
repo.pullRequestCount = pulls.length;
console.log(repo);
user.repositories.push(repo);
});
});
})(repoName, repoUrl);
}
}).then(function() {
var payload = new Object();
payload.user = user;
//console.log(payload);
//console.log(repoData[0]);
res.send(payload);
});
这是不是你应该使用的承诺。 .. –
问题代码是否完整?什么是最后的'.then()'链接? – guest271314