Javascript 如何使用promise.all in then()-链

Javascript 如何使用promise.all in then()-链,javascript,node.js,es6-promise,Javascript,Node.js,Es6 Promise,可能是我的问题标题已关闭,以防承诺。解决此问题所需的并非全部 我在promise中有一个then()-链,我有一系列类似的操作,我真的应该以不同的方式处理,但我对promise是新手 return new Promise(function(resolve, reject) { c.scraper.load().then(function () { .... var personUrl = url + "/" + c.people[0]; re

可能是我的问题标题已关闭,以防
承诺。解决此问题所需的并非全部

我在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
返回一个承诺,您可以这样做:

var promiseArray = c.people.map(function(person) {
  var personUrl = url + "/" + person;
  return c.checkPerson(personUrl)
})

Promise.all(promiseArray).then(function() {
  // complete
})

假设
c.checkPerson
返回承诺,您可以执行以下操作:

var promiseArray = c.people.map(function(person) {
  var personUrl = url + "/" + person;
  return c.checkPerson(personUrl)
})

Promise.all(promiseArray).then(function() {
  // complete
})

首先,由于
c.scraper.load()
本身返回一个承诺,因此可以返回整个承诺链的结果,而不需要将其包装在
新承诺(…)

接下来,由于
c.people
似乎是您要获取的路径数组,因此您可以
将该数组映射到承诺列表,然后使用等待它们全部解决:

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
});

这有帮助吗?

首先,由于
c.scraper.load()
本身会返回一个承诺,因此您可以返回整个承诺链的结果,而不需要将其包装在
新承诺(…)

接下来,由于
c.people
似乎是您要获取的路径数组,因此您可以
将该数组映射到承诺列表,然后使用等待它们全部解决:

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
});

这有帮助吗?

@Freyday下面的方法是正确的,只有当
c.checkPerson()
返回一个promise.Or
c.scraper.load(),然后(()=>promise.all(c.people.map(person=>c.checkPerson(url+“/”+person)),这种方法才有效。然后(results=>{}.catch(e=>console.error(e))@Freyday是正确的,这种方法只有在
c.checkPerson()
返回一个promise.Or
c.scraper.load(),然后(()=>promise.all(c.people.map(person=>c.checkPerson(url+“/”+person))。然后(results=>{}.catch(e=>console.error(e))避免错误!不要忘记
.catch(e=>console.error(e))在最后,这样你就可以看到你是否犯了错误!避开这个!不要忘记
.catch(e=>console.error(e))在最后,这样你就可以看到你是否犯了错误!