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.Orc.scraper.load(),然后(()=>promise.all(c.people.map(person=>c.checkPerson(url+“/”+person)),这种方法才有效。然后(results=>{}.catch(e=>console.error(e))下面的code>@Freyday是正确的,这种方法只有在c.checkPerson()
返回一个promise.Orc.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))代码>在最后,这样你就可以看到你是否犯了错误!