【发布时间】:2018-11-21 07:57:53
【问题描述】:
我试图弄清楚如何在 for 循环中一个接一个地解决任意数量的承诺。
我有一个名为 scrapePage(num) 的函数,它接收一个数字并对某个网页进行 HTTP 调用。 我已经尝试了多种方法来解决这个问题。
1) 使用一组 promise(以随机顺序解析它们):
var promises = [];
for (var i = 0; i < 4; i++) {
promises.push(scrapPage(i));
}
$q.all(promises).then(doMoreThings);
2) 使用调用链(对于任意数量的调用无用):
var chain = $q.when();
chain.then(function() {
return scrapPage(0);
}).then(function() {
return scrapPage(1);
}).then(function() {
return scrapPage(2);
}).then(function() {
return scrapPage(3);
}).then(doMoreThings);
我正在玩链功能,试图让它工作。出于测试目的,我让 scrapePage 在每次解析时打印出“page #n”。
这是我现在拥有的:
var chain = $q.when();
for (var i = 0; i < 4; i++) {
console.log("i: " + i);
chain = chain.then(function() {
console.log("\ni: " + i);
return scrapPage(i);
});
}
我可以指出它有两个主要问题。
首先,它的输出绝对是奇怪的。
i: 0
i: 1
i: 2
i: 3
i: 4
page #4
i: 4
page #4
i: 4
page #4
i: 4
page #4
其次,在所有的承诺都解决之后,我不知道如何做到doMoreThings。
谁能告诉我我错过了什么?
【问题讨论】:
标签: javascript angularjs promise angular-promise