如何在 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
});

有帮助吗?