【发布时间】:2017-09-30 16:27:12
【问题描述】:
我不确定这是否可行,但这是我正在尝试做的。我调用了一个返回承诺的数据库。在then 中,我想遍历结果并为每一行生成一个新的promise 以发出HTTP 请求。它正在执行所有 HTTP 请求,但我无法为每个请求链接 then 。这是我尝试过的:
尝试 1
userDao.getBitbucketInfoForUser(token.id, cohortId)
// Get Bitbucket information and make clones
.then((teams) => {
for(const team of teams) {
console.log('Clone repo ' + sourceRepo + ' for Team-' + team.teamNumber);
return makeFork(gitInfo, sourceRepo, team);
}
})
.then((result) => {
const team = result.team;
console.log('Wait for Team ' + team + ' repo');
})
.catch((error) => {
console.log(error);
response.status(error.status).json(error).end()
});
我马上意识到这很愚蠢,因为我正在返回并打破我的循环。所以我去了这个:
尝试 2
userDao.getBitbucketInfoForUser(token.id, cohortId)
// Get Bitbucket information and make clones
.then((teams) => {
for(const team of teams) {
console.log('Clone repo ' + sourceRepo + ' for Team-' + team.teamNumber);
makeFork(gitInfo, sourceRepo, team)
.then((result) => Promise.resolve(result));
}
})
.then((result) => {
const team = result.team;
console.log('Wait for Team ' + team + ' repo');
})
.catch((error) => {
console.log(error);
response.status(error.status).json(error).end()
});
这一次它在makeFork 中进行了所有调用,但只运行了then 一次。接下来我尝试了这个:
尝试 3
userDao.getBitbucketInfoForUser(token.id, cohortId)
// Get Bitbucket information and make clones
.then((teams) => {
for(const team of teams) {
console.log('Clone repo ' + sourceRepo + ' for Team-' + team.teamNumber);
new Promise((resolve, reject) => resolve(makeFork(gitInfo, sourceRepo, team)));
}
})
.then((result) => {
const team = result.team;
console.log('Wait for Team ' + result + ' repo');
})
.catch((error) => {
console.log(error);
response.status(error.status).json(error).end()
});
这导致与尝试 2 完全相同的行为。有没有办法做我想做的事?
【问题讨论】:
-
我看到了,但它看起来并不像我想要的那样。一旦它们全部解决,它需要一些交互并调用 then 。我可能需要它,但我不想对每个 HTTP 调用采取行动。
标签: javascript node.js promise es6-promise