具体的には、データのリストがあれば、そのリストをループして、後ですべてを結合する前にそのデータの各要素をフェッチします。つまり、書かれているように、コードはすぐにすべての操作を開始して、リスト全体をただちに反復処理します。その後、フェッチ操作が実行されていても、データが処理される前に、その呼び出しが実行された後に呼び出されます。約束事の後にコールバックを実行するにはどうしたらいいですか?
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