可能是我的问题标题已关闭,以防promise.all
不是解决此问题的必要条件。
我的承诺中有一个then()
链,我有一系列类似的操作,我真的应该采取不同的处理方式,但我是新的承诺。
return new Promise(function(resolve, reject) {
c.scraper.load().then(function () {
....
var personUrl = url + "/" + c.people[0];
return c.checkPerson(personUrl);
}).then(function(){
var personUrl = url + "/" + c.people[1];
return c.checkPerson(personUrl);
}).then(function(){
var personUrl = url + "/" + c.people[2];
return c.checkPerson(personUrl);
....
我认为你遇到了问题。
第一步是将这三者合并为一,如果可能的话,第二步是使其与数组c.people
中未知数量的人一起使用。
答案 0 :(得分:2)
假设c.checkPerson
返回Promise,您可以执行以下操作:
var promiseArray = c.people.map(function(person) {
var personUrl = url + "/" + person;
return c.checkPerson(personUrl)
})
Promise.all(promiseArray).then(function() {
// complete
})
答案 1 :(得分:2)
首先,由于c.scraper.load()
本身会返回一个承诺,您可以返回整个承诺链的结果,而不需要将其包装在new Promise(...)
中。
接下来,由于c.people
似乎是您要获取的路径数组,您可以map
将数组添加到承诺列表中,然后使用Promise.all()
等待它们全部解决:
return c.scraper.load().then(function () {
return Promise.all(c.people.map(function (person) {
var personUrl = url + "/" + person;
return c.checkPerson(personUrl);
}));
}).then(function (results) {
// `results` is an array containing the results of the `checkPerson()` calls
});
这有帮助吗?