如何在 then() 链中使用 promise.all
how to use promise.all inside then()-chain
可能是我的问题标题不对,以防promise.all
不是我解决这个问题所需要的。
我的 promise 中有一个 then()
- 链,我有一系列类似的操作,我确实应该以不同的方式处理,但我是 promise 的新手。
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
。
假设 c.checkPerson
returns 一个 Promise,你可以这样做:
var promiseArray = c.people.map(function(person) {
var personUrl = url + "/" + person;
return c.checkPerson(personUrl)
})
Promise.all(promiseArray).then(function() {
// complete
})
首先,由于c.scraper.load()
本身return是一个promise,你可以return整个promise链的结果,你不需要把它包裹在new Promise(...)
.
接下来,由于c.people
好像是你要获取的路径数组,你可以map
数组到一个promises列表,然后用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
});
有帮助吗?
可能是我的问题标题不对,以防promise.all
不是我解决这个问题所需要的。
我的 promise 中有一个 then()
- 链,我有一系列类似的操作,我确实应该以不同的方式处理,但我是 promise 的新手。
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
。
假设 c.checkPerson
returns 一个 Promise,你可以这样做:
var promiseArray = c.people.map(function(person) {
var personUrl = url + "/" + person;
return c.checkPerson(personUrl)
})
Promise.all(promiseArray).then(function() {
// complete
})
首先,由于c.scraper.load()
本身return是一个promise,你可以return整个promise链的结果,你不需要把它包裹在new Promise(...)
.
接下来,由于c.people
好像是你要获取的路径数组,你可以map
数组到一个promises列表,然后用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
});
有帮助吗?